二進(jìn)制移位運(yùn)算詳解 為什么這兩個(gè)運(yùn)算不一樣?
為什么這兩個(gè)運(yùn)算不一樣?Java中有三種移位運(yùn)算符:shift right operator,Num>>;1,相當(dāng)于Num除以2>>;shift right without sign,
為什么這兩個(gè)運(yùn)算不一樣?
Java中有三種移位運(yùn)算符:shift right operator,Num>>;1,相當(dāng)于Num除以2>>;shift right without sign,ignore sign bit,用0補(bǔ)空。讓我們看看這些移位運(yùn)算符是如何使用的。Number=10number=Number> 1printinfo(}運(yùn)行結(jié)果為:1010101001010。讓我們對(duì)齊上面的結(jié)果:43210位數(shù):1010小數(shù)點(diǎn):10原始數(shù)字:10100小數(shù)點(diǎn):20左移一位數(shù)=數(shù)字>;1看上面的演示,你現(xiàn)在對(duì)左移和右移了解很多嗎?>>;for:shift right without sign,ignore sign bit,空位填充0 value>>>> num--num指定要移位的值要移動(dòng)的位數(shù)。無(wú)符號(hào)右移規(guī)則只記住一件事:有符號(hào)位擴(kuò)展被忽略,0補(bǔ)碼最高位無(wú)符號(hào)右移運(yùn)算符>>>;只對(duì)32位和64位值有意義
例如:11111 001<<;111111 0001111011<<;411110000右移有點(diǎn)麻煩,如下:>>N是這樣操作的:右移n位,如果高位是1,則左補(bǔ)碼1;如果高位是0,則左補(bǔ)碼0(Java是這樣的,C語(yǔ)言,如果高位是1,則右補(bǔ)碼0或1取決于硬件)例如:11111 001>>11111110001111011>>100111101>>>>;GTN的操作如下:將n位右移,無(wú)論高位是0還是1,都補(bǔ)碼0,例如:11111 001>>1011110011111011>>100111101