
05.01.2007, 22:34
|
|
Флудер
Регистрация: 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-х байтовую переменную три байта, поэтому переполнения буфера не будет никогда. Просто в переменную запишется другое, урезанное значение.
|
|
|