Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Циклическое свойство представления целых чисел




 

Что же произойдет, если к наибольшему допустимому значению мы прибавим еще 1. Для изучения этого вопроса напишем программу:

char c=127;

c=c+1;

cout<<(int)c<<end’l;

Тип char - это сокращение от character (читается ”кэрикте”) – буква. Этот тип представляет в языке С++ знаковые числа в дополнительном коде и как раз нам подходит. В последнем операторе перед выводом выполняется преобразование к типу (int), иначе переменная с, имеющая символьный тип, будет выведена как символ (буква).

После исполнения программы мы получим значение (–128), т.е. наименьшее возможное значение. Вместо увеличения значения мы неожиданно получили значительное уменьшение (на 256). При обычных вычислениях такая ситуация считается аварийной и называется “переполнение”. Знание природы двоичных чисел позволяет нам легко объяснить такое поведение:

0111 1111 = +127

1

1000 0000 = -128

В свою очередь при вычитании: char c=-128; c=c-1; //c=127 происходит аналогичное явление, только наоборот.

Такое свойство чисел назовем циклическим и представим его в виде круговой диаграммы:

 

 

       
   
б
 
а
 

 

 


Рисунок 1.1 – Круговая диаграмма представления значений целых чисел

а - для чисел со знаком в доп. коде; б - для чисел без знака

 

В связи с тем, что данное свойство отражает природу реального мира, например отсчет углов поворота по компасу, и оно с пользой может быть использовано грамотными программистами, ситуация переполнения не выявляется как ошибочная. Расчет будет продолжен с новым значением. Это как раз тот случай, когда задача обеспечения правильности вычислений целиком ложится на плечи программиста.

Для обеспечения беззнакового представление чисел при объявлении переменной необходимо применить модификатор unsigned. Преимуществом использования такой переменной будет удвоение диапазона положительных значений. Допустимыми значениями станут числа от 0 до 255 (28-1).

unsigned char c=127;

c=c+1;

cout<<(int)c<<endl; //c=128

c=255;

c=c+1;

cout<<(int)c<<endl; //c=0

c=0;

c=c-1;

cout<<(int)c<<endl; //c=255




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 418; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.