溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c語言中移位運(yùn)算符的示例分析

發(fā)布時(shí)間:2021-05-11 14:49:10 來源:億速云 閱讀:181 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹c語言中移位運(yùn)算符的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

C語言是什么

C語言是一門面向過程的、抽象化的通用程序設(shè)計(jì)語言,廣泛應(yīng)用于底層開發(fā),使用C語言可以以簡易的方式編譯、處理低級(jí)存儲(chǔ)器。

移位運(yùn)算符在程序設(shè)計(jì)中,是位操作運(yùn)算符的一種。移位運(yùn)算符可以在二進(jìn)制的基礎(chǔ)上對(duì)數(shù)字進(jìn)行平移。

c語言中提供了兩種移位運(yùn)算符:

左移運(yùn)算符:<<
右移運(yùn)算符:>>

左移運(yùn)算符(<<)

int main(void)
{
	int a = 4;
	//把a(bǔ)的二進(jìn)制位向左移動(dòng)1位
	int b = a << 1;
	printf("b = %d", b);
	return 0;
}

在32位操作系統(tǒng)中,int類型占4個(gè)字節(jié),1個(gè)字節(jié)有8bit,所以變量a在內(nèi)存中占32個(gè)比特位。

將4賦值給變量a,a中存放的是4的二進(jìn)制形式。

c語言中移位運(yùn)算符的示例分析

將a向左移動(dòng)一位

c語言中移位運(yùn)算符的示例分析

最高位的0丟棄,末位補(bǔ)0

c語言中移位運(yùn)算符的示例分析

可以看到a左移一位后的結(jié)果是1000,轉(zhuǎn)換成10進(jìn)制就是8,所以打印b的結(jié)果就是8。

c語言中移位運(yùn)算符的示例分析

右移運(yùn)算符(>>)

int main(void)
{
	int a = 10;
	//把a(bǔ)的二進(jìn)制位向右移動(dòng)1位
	int b = a >> 1;
	printf("b = %d", b);
	return 0;
}

把10賦值給變量a,將10表示成二進(jìn)制形式

c語言中移位運(yùn)算符的示例分析

將10向右移動(dòng)一位,最低位的0丟棄

c語言中移位運(yùn)算符的示例分析

最高位補(bǔ)0

c語言中移位運(yùn)算符的示例分析

最后的結(jié)果轉(zhuǎn)換成10進(jìn)制就是5

c語言中移位運(yùn)算符的示例分析

我們可以看到最后打印b的結(jié)果確實(shí)是5。

這里需要注意的是,右移分為算數(shù)右移和邏輯右移

算數(shù)右移: 右邊丟棄,左邊補(bǔ)原符號(hào)位
邏輯右移: 右邊丟棄,左邊補(bǔ)0
內(nèi)存中存放二進(jìn)制序列的時(shí)候,最高位是0表示正數(shù),最高位是1表示負(fù)數(shù)。
因?yàn)?0是正數(shù),所以無論是算數(shù)右移還是邏輯右移,最高位都是補(bǔ)0。那么這里的右移運(yùn)算到底是算數(shù)右移還是邏輯右移呢?
整數(shù)的二進(jìn)制表示形式有三種:原碼、反碼、補(bǔ)碼
原碼:直接根據(jù)數(shù)值寫出的二進(jìn)制序列
反碼:原碼的符號(hào)位不變,其他位按位取反
補(bǔ)碼:反碼加1

計(jì)算機(jī)內(nèi)存數(shù)值存儲(chǔ)方式是補(bǔ)碼

int main(void)
{
	int a = -1;
	//把a(bǔ)的二進(jìn)制位向右移動(dòng)1位
	int b = a >> 1;
	printf("b = %d", b);
	return 0;
}

以-1為例

-1的原碼:

c語言中移位運(yùn)算符的示例分析

-1的反碼:

c語言中移位運(yùn)算符的示例分析

-1的補(bǔ)碼:

c語言中移位運(yùn)算符的示例分析

因?yàn)橛?jì)算機(jī)中存儲(chǔ)的是補(bǔ)碼,將-1右移1位,最低位的1舍棄

c語言中移位運(yùn)算符的示例分析

先來看b的打印結(jié)果

c語言中移位運(yùn)算符的示例分析

b的值為-1,說明最高位補(bǔ)的是1,此時(shí)進(jìn)行的是算數(shù)右移。
需要注意的是,雖然a進(jìn)行了右移操作,但是a的值是不發(fā)生改變的,我們可以將a也打印出來

int main(void)
{
	int a = 10;
	//把a(bǔ)的二進(jìn)制位向右移動(dòng)1位
	int b = a >> 1;
	printf("a = %d\n", a);
	printf("b = %d", b);
	return 0;
}

c語言中移位運(yùn)算符的示例分析

a的結(jié)果仍然是10。

int a = 10;
int b = a + 1;

和上面的代碼是一樣的,在進(jìn)行移位運(yùn)算的時(shí)候,移位對(duì)象的值并不會(huì)發(fā)生改變

以上是“c語言中移位運(yùn)算符的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI