#типы_данных
Почему при кодировании числа 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), либо является отрицательным числом.
Комментариев нет:
Отправить комментарий