parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Они действительно обрезаются...

mashi 05.02.2006 00:43

Используя числовые литералы в шестнадцатиричной форме нужно заботиться о том что бы они имели ноль в старшем розряде. Потому что он зарезервирован для указания признака отрицательного числа.
И формат записи шестнадцатиричных чисел "0x" -- подсказывает об этом.
#################################################################
0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647 ( 0x7FFFFFFF)
1000 0000 0000 0000 0000 0000 0000 0000 = -2147483648 (-1-0x7FFFFFFF)
#################################################################
Поэтому записывая
$a(0x9F000000)
имеем недопустимую единицу в саршем разряде
   1001 1111 0000 0000  0000 0000 0000 0000
---^
В ашем примере числа 0х9Е000000 и 0хFF000000 обрезаются до максимального целого числа 0х7F000000 и поэтому они равны.

По поводу double: формат шестнадцатиричной записи предусмотрен только для целых чисел.