c/c++中k<<=1什么意思啊
1 回答

慕絲7291255
TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
機(jī)器碼你應(yīng)該知道吧:就是0,1序列,位移操作建立在補碼的基礎(chǔ)之上。
1.無符號位移
無符號位移:左移,高位截去,低位補零。右移,高位補零,低位截去。
舉個無符號位移的例子:
假設(shè)int i=3:轉(zhuǎn)換成原碼:0000 0011
i<<=1則表示將以上的二進(jìn)制碼往左移動一位,低位補零。結(jié)果是:0000 0110即十進(jìn)制的6.
所以無符號位移有結(jié)論:i<<=n 等價于 i=i*(2的n次方); i>>=n 等價于 i=i/(2的n次方)(n>=0)(暫不考慮溢出的情況)。
2.帶符號位移(暫不考慮溢出的情況)
帶符號位移正數(shù)和無符號位移沒有區(qū)別(因為正數(shù)的補碼和反碼,只是在原碼前加正數(shù)標(biāo)識位0)。
帶符號負(fù)數(shù)位移則不同(因為負(fù)數(shù)的補碼是反碼加一取得,反碼是原碼按位取反再在高位加上標(biāo)識位1得到),左移是符號位不變,整體左移,低位補0,右移是符號位不變,整體右移,高位補1。
- 1 回答
- 0 關(guān)注
- 941 瀏覽
添加回答
舉報
0/150
提交
取消