Показать сообщение отдельно

  #7  
Старый 05.01.2007, 22:34
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
С нами: 10721066

Репутация: 4360


По умолчанию

Цитата:
Допустим что у тебя 32битный проц -> у unsigned short 2 байта = 16 бит (0 - 65535).
Так вот:
101111101011110000011111111(bin) = 99999999(dec)
Дабы вместить значение в 2хбайтовую переменную, то что отмечено красным отбрасывается - вот и все. Остается:
1110000011111111(bin) = 57599
что и выводится на экран
это произойдет еще на этапе компиляции, причем умный компилер даже выдаст ворнинг о превышении даипазона значений.

Цитата:
bof = buffer overflow = переполнение буфера =) И может случиться оно и до тех пор, когда биты вылезут за разрядную сетку, занимаемую переменной в памяти =Р Если тип signed
никогда не получится запихнуть, например, в 2-х байтовую переменную три байта, поэтому переполнения буфера не будет никогда. Просто в переменную запишется другое, урезанное значение.