|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
C語言裡的移位運算的問題
很少做以為運算,昨天做了個移位,遇到一個問題,請高手賜教:
一個unsigned int 型整數,我要得到它的最後3位。比如拿75來說, 2進製表示: 01001011
我希望得到一個數字是它的後3位,就是: 00000011
我進行左移:
a = 75;
c = a << 5;
c = c >;>; 5;
第一步按C語言書裡說的是左移後高位丟棄,低位補0, 那麼就應該是:
01100000
然後第2步右移後高位補0,低位丟棄,就可以得到:
00000011
但結果我做出來第一步的結果是:
0100101100000 = 75 * 2的5次方
這樣和書裡的說法就矛盾了啊。
我這樣移位有問題嗎?那該如何丟棄高位呢?
謝謝 |
C語言裡的移位運算的問題
你用的是32位機,又不是8086,當然出錯了
直接用與運算豈不更省事 |
C語言裡的移位運算的問題
傻瓜,你使用的數據類型不對,應該該成 字符型的
unsigned char bitchar = 75.就ok 了。 |
C語言裡的移位運算的問題
是啊用位與就可以了 |
C語言裡的移位運算的問題
另外第二個的話不知道是不是有的機器會進行符號移位
沒具體試過 |
C語言裡的移位運算的問題
這個於機器位數和類型存儲有關係。不同的機器測試結果有所差別。
具體應用中最好做測試 |
C語言裡的移位運算的問題
因為要求的保留的位是變動的,可能是3也可能是5,不固定,所以我直接用以為來更改。如果用與的話,你也得構造那個與數吧,那不是一樣的嗎?
比如:01001011 我要把3-5位置0,那麼就是用01000011來與,但構造這個01000011不也要用移位操作來獲得嗎? |
C語言裡的移位運算的問題
同意鍵盤的
在這裡你要移13位。 |
C語言裡的移位運算的問題
同意田地,用位與好像好一些。 |
| |