Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Старший бит числа 0 в двоичном представлении

#типы_данных


Почему при кодировании числа 0, он записывается именно как положительный 0, т.е.
0.0000000? А не, допустим, отрицательный (со старшим битом равным 1 - 1.0000000).
Рассматриваются целочисленные типы данных со знаком.

Исторические предпосылки? Или это связано с выполнением арифметических опеоаций в
двоичном виде?
    


Ответы

Ответ 1



Потому что отрицательные числа представлены не в прямом коде, а в дополнительном. А ещё потому, что существуют беззнаковые типы, и весьма логично, что в неотрицательной части они совместимы.

Ответ 2



Это зависит от платформы и представлении в ней целых чисел. Некоторые платформы поддерживают во внутреннем представлении целых чисел отрицательный ноль. Из стандарта языка C (6.2.6.2 Integer types): ...In the case of sign and magnitude and ones’ complement, if this representation is a normal value it is called a negative zero. 3 If the implementation supports negative zeros, they shall be generated only by: — the &, |, ^, ~, <<, and >> operators with operands that produce such a value; — the +, -, *, /, and % operators where one operand is a negative zero and the result is zero; — compound assignment operators based on the above cases. It is unspecified whether these cases actually generate a negative zero or a normal zero, and whether a negative zero becomes a normal zero when stored in an object. Просто самые распространенные платформы имеют внутреннее представление целых чисел в виде дополнения до 2^n, для которого либо представление, в котором знаковый бит установлен, а все другие биты равны нулю не является допустимым значением (trap value), либо является отрицательным числом.

Комментариев нет:

Отправить комментарий