Обучение : Программирование на Си для PIC


Избыточный займ и переполнение

Я пока не нашел подходящего места в самоучителе для этого вопроса, но считаю, что уже необходимо осветить этот вопрос. Что понимается под избыточным займом? Представим себе переменную tmp в которой сидит число 2. А теперь представим что из tmp вычитается число 3.

 

tmp = 2;

tmp = tmp – 3;

 

Сколько сейчас в tmp ? Во-первых, необходимо определиться с тем, к какому типу данных относится tmp. Пусть это будет unsigned char (беззнаковый чар), т.е. его диапазон 0…255.

 

Во-вторых, для лучшего понимания от tmp будем отнимать в два захода, сначала отнимем 2, а потом 1.

 

Отняли 2. В tmp у нас 0.

 

Отнимаем еще 1. И значение tmp у нас становится 255. Произошел так называемый избыточный займ.

 

Необходимо понимать, что нет ограничений по поводу вычитания в беззнаковом чаре. Впрочем и в других переменных тоже. В знаковом чаре седьмой бит – это признак отрицательного числа. Но всё равно, если будет вычтено больше, чем есть в переменной, у данной переменной будет сделан избыточный займ. Т.е. число не станет более отрицательным, и оно не будет равно нулю.

 

Таким образом, механизм избыточного займа выглядит как вычитание из переменной до нуля, а затем вычитание остатка из максимума этой переменной (перечитайте абзац еще раз).

 

Переполнение выглядит точно также, но наоборот.

 

unsigned char tmp = 255;

tmp = tmp + 1;

Теперь в tmp у нас ноль.

 


<<< назад далее >>>

Просмотров: 22709

 








 
 
 

В русском Интернете бестолку защищать свои права. Хотите использовать материалы - используйте,
но с письменного согласия авторов. В противном случае будут высланы соответствующие письма
в поисковые системы об ограничении индексации ваших сайтов. Не доводите до греха.