unsigned int 左移32位相當(dāng)于不移動(dòng)。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、富寧網(wǎng)站維護(hù)、網(wǎng)站推廣。
移位運(yùn)算,要求移位結(jié)果至少保留一位原來(lái)的數(shù)字,也就是說(shuō) 32 位,最多左移或右移31位,超出31位 得到的數(shù)據(jù) 是無(wú)意義的。
0xffffffff 左移31位是 0x80000000.
沒(méi)有辦法移動(dòng)成 32位 全0。(除非使用的編譯器另有規(guī)定)。
-----------------------------
unsigned int a=0xffffffff;
printf("%#x %#x %#x %#x\n",a,a31,a32, a32 );
MS VC++ 6.0 輸出 是:
0xffffffff 0x80000000 0xffffffff 0xffffffff
05左移5位,即000000
06左移6位,即0000000
左移后是用二進(jìn)制表示的,
具體的這個(gè)程序中有什么用,應(yīng)該看程序本身,
就像#define PI_FRMERR (0 5)
用000000代替PI_FRMERR可能與某個(gè)數(shù)進(jìn)行與操作或其他的。
C語(yǔ)言中按位左移的運(yùn)算符為,其規(guī)則如下:
對(duì)于操作an,
1 按照二進(jìn)制值每位向高位(書寫上是向左)移動(dòng)n位;
2 最高位(最左邊的)n位舍去;
3 最低位(最右邊)填加n個(gè)0.
簡(jiǎn)單起見(jiàn),用char型舉例如下:
例一
0x12 3 =
B00010010 3 =
B10010 000(這里最高位的三個(gè)0被舍去,其它依次左移,最低位補(bǔ)三個(gè)0) =
0x90
即0x12 3 = 0x90
例二
0x9E 2 =
B10011110 2 =
B01111000 (最高位10舍去,最低位補(bǔ)兩個(gè)0)=
0x78
可以編寫如下程序驗(yàn)證:
#include?stdio.h
void?check(char?a,?int?n)
{
printf("0x%hhx??%d?=?0x%hhx\n",?a,?n,?an);
}
int?main()
{
check(0x12,?3);
check(0x9e,?2);
return?0;
}
其運(yùn)行結(jié)果為
0x12??3?=?0x90
0x9e??2?=?0x78
可以看到與我們計(jì)算結(jié)果是相符的。