右移C中的負(fù)數(shù)我有C代碼,我在其中執(zhí)行以下操作。int nPosVal = +0xFFFF; // + Added for ease of understanding
int nNegVal = -0xFFFF; // - Added for valid reason現(xiàn)在,當(dāng)我嘗試printf ("%d %d", nPosVal >> 1, nNegVal >> 1);我明白了32767 -32768這是預(yù)期的嗎?我能夠想到類似的東西65535 >> 1 = (int) 32767.5 = 32767-65535 >> 1 = (int) -32767.5 = -32768也就是說,-32767.5四舍五入為-32768。這種理解是否正確?
3 回答

至尊寶的傳說
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個贊
不,在使用整數(shù)時,不會得到像0.5這樣的小數(shù)。當(dāng)您查看兩個數(shù)字的二進(jìn)制表示時,可以很容易地解釋結(jié)果:
65535: 00000000000000001111111111111111 -65535: 11111111111111110000000000000001
位移到右邊一位,并在左邊延伸(請注意,這取決于實(shí)現(xiàn),感謝Trent):
65535 >> 1: 00000000000000000111111111111111-65535 >> 1: 11111111111111111000000000000000
轉(zhuǎn)換回十進(jìn)制:
65535 >> 1 = 32767 -65535 >> 1 = -32768
- 3 回答
- 0 關(guān)注
- 545 瀏覽
添加回答
舉報
0/150
提交
取消