В этом случае мы работаем так, будто в нашем распоряжении есть достаточное количество битов, и отбрасываем ту часть целого числа, которая не помещается в память.
Также вам может показаться, что такая тема как паяльное оборудование http://lukeys.ru/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт про паяльное оборудование lukeys.ru
Тема паяльное оборудование lukey 702 там представлена весьма широко.
В памяти мы храним результат. Эта стратегия приводит к потере крайних левых (самых старших) битов. Такой же эффект можно получить с помощью следующего кода:
int si = 2 57; // не помещается в типе char
char c = si; // неявное преобразование в char
unsigned char uc = si; signed char sc = si;
print(si); print(c); print(uc); print(sc); cout << '\n';
si = 129; // не помещается в signed char
c = si; uc = si; sc = si;
print(si); print(c); print(uc); print(sc);
Получаем следующий результат:
257 1 1 1
129 -127 129 -127
Объяснение этого результата таково: число 257 на два больше, чем можно представить с помощью восьми битов (255 равно “восемь единиц”), а число 129 на два больше, чем можно представить с помощью семи битов (127 равно “семь единиц”), поэтому устанавливается знаковый бит. Кстати, эта программа демонстрирует, что тип char на нашем компьютере имеет знак (переменная c ведет себя как переменная sc и отличается от переменной uc).
Напишите эти битовые комбинации на листке бумаги. Затем попытайтесь вычислить результат для si=12 8. После этого выполните программу и сравните свое предположение с результатом вычислений на компьютере.
Кстати, почему мы использовали функцию print() ? Ведь мы могли бы использовать оператор вывода. cout << i << ' ';
Однако, если бы переменная i имела тип char, мы увидели бы на экране символ, а не целое число. По этой причине, для того чтобы единообразно обрабатывать все целочисленные типы, мы определили функцию print().
template void print(T i) { cout << i << '\t'; } void print(char i) { cout << int(i) << '\t'; } void print(signed char i) { cout << int(i) << '\t'; } void print(unsigned char i) { cout << int(i) << '\t'; }
Вывод: вы можете использовать целые числа без знака вместо целых чисел со знаком (включая обычную арифметику), но избегайте этого, поскольку это ненадежно и приводит к ошибкам.
• Никогда не используйте целые числа без знака просто для того, чтобы получить еще один бит точности.
• Если вам необходим один дополнительный бит, то вскоре вам потребуется еще один.
К сожалению, мы не можем совершенно избежать использования арифметики целых чисел без знака.
• Индексирование контейнеров в стандартной библиотеке осуществляется целыми числами без знака.
• Некоторые люди любят арифметику чисел без знака.
Опубликовал katy
April 26 2015 11:33:10 ·
0 Комментариев ·
3179 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.