藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 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語言裡的移位運算的問題

同意田地,用位與好像好一些。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com