2013-03-12 28 views
0

如何在向左移動時削減二進制數而不是擴展位數?如何在向左移動時切割二進制數?

int num = 0b101010; 
num = num << 1 // I want num to be now 01010 
num = num << 1 // I want num to be now 1010 
num = num << 1 // I want num to be now 010 
num = num << 1 // I want num to be now 10 

有沒有簡單的方法來做到這一點?

+2

如果你想在某個階段的數字是'01010',那麼你似乎在處理'字符串',而不是二進制數字。每次迭代只需從你的'String'中剪掉最左邊的字符。 – Keppil 2013-03-12 20:51:21

+1

使用AND運算符來提取某些字節。會容易很多。第一個是'num&31',第二個'num&15'。然後,您可以將每個操作上的第二個操作員轉移到右側1。 – 2013-03-12 20:51:57

回答

3

是的,這很容易做到:用所有的面具(0b111111)做一個面具,並用它來掩蓋你的原始號碼,使用&。當你移動掩模的權利,你會得到以下效果:

Number Mask Result 
------ ------ ------ 
101010 011111 001010 
101010 001111 001010 
101010 000111 000010 
101010 000011 000010 
101010 000011 000010 
101010 000001 000000 
+0

我想也許他想讓最左邊的數字出現在右邊。例如,11110000將是1111000。 – 2013-03-12 21:10:53

0

您可以使用:

int num = 0b101010; 
num = num >> 4; 

現在是0b10