|
移位分為邏輯左移,邏輯右移以及算數(shù)右移。
1、邏輯左移
左移n位,低n位補(bǔ)0,視數(shù)據(jù)類型的長(zhǎng)度截?cái)嘁莆恢蟮臄?shù)據(jù)。如題主所描述的,0xfe為一個(gè)字節(jié),用二進(jìn)制表示為0b1111 1110,也就是8個(gè)比特,左移一位之后,最低位補(bǔ)0,數(shù)據(jù)長(zhǎng)度為9個(gè)比特,用二進(jìn)制表示為0b1 1111 1100,由于一個(gè)字節(jié)只能存儲(chǔ)八個(gè)比特,最高位溢出,最終移位的結(jié)果為0b1111 1100。
不同于右移,左移只有邏輯移位,沒(méi)有算數(shù)移位。
2、邏輯右移
數(shù)據(jù)右移,處于高位的比特會(huì)空出來(lái),為保證數(shù)據(jù)長(zhǎng)度一致,這就涉及到對(duì)空出來(lái)的比特位填充的問(wèn)題。當(dāng)始終填充0時(shí),不考慮原始數(shù)據(jù)的最高位比特,該右移被稱為邏輯右移。
例如,0b1111 1110 ->邏輯右移1位->0b0111 1111
3、算數(shù)右移
和邏輯右移填充0不同,當(dāng)原始數(shù)據(jù)的最高位為1時(shí),填充位為1,當(dāng)原始數(shù)據(jù)的最高位為0時(shí),填充位為0,也就是填充位等于原始數(shù)據(jù)的最高位。
例如,0b1111 1110 ->算數(shù)右移->0b1111 1111
|
|