位操作符和移位操作符都是針對于二進(jìn)制進(jìn)行操作的
整數(shù)在內(nèi)存中的存儲整數(shù)在內(nèi)存中儲存的是他的二進(jìn)制補(bǔ)碼
整數(shù)(int)在內(nèi)存空間中占四個字節(jié)
正數(shù)原碼反碼補(bǔ)碼相同
負(fù)數(shù)反碼等于源碼處符號位其余為取反
補(bǔ)碼等于補(bǔ)碼+1
移位操作符例如10的二進(jìn)制序列為1010
補(bǔ)碼和原碼相同 即
00000000 00000000 00000000 00001010
例如-10的二進(jìn)制序列為
10000000 00000000 00000000 00001010
反碼為
11111111 11111111 11111111 11110101
補(bǔ)碼為
11111111 11111111 11111111 11110110
移位操作符包括
左移操作符:<<
右移操作符:>>
注意移位操作符的對象必須是整數(shù)
左移操作符的規(guī)則是左邊丟棄,右邊補(bǔ)0
例如10左移兩位
先寫出10的二進(jìn)制序列
00000000 00000000 00000000 00001010
補(bǔ)碼是
00000000 00000000 00000000 00001010
左移兩位右邊補(bǔ)0后
00000000 00000000 00000000 00101000
用十進(jìn)制表示就是40
#includeint main()
{int b = 10<< 2;
printf("%d",b);
return 0;
}
右移操作符右移操作符分為兩種,算術(shù)右移和邏輯右移
算術(shù)右移是右邊丟棄,左邊補(bǔ)原來的符號位
邏輯右移是右邊丟棄,左邊補(bǔ)零
C語言中位操作符有按位與 按位或 按位異或
他們的操作數(shù)是整數(shù) ,對象是整數(shù)的二進(jìn)制序列
運(yùn)算編碼:補(bǔ)碼
將整數(shù)從十進(jìn)制轉(zhuǎn)化為二進(jìn)制數(shù),上下比較,有零則零 ,兩個都是 1 才是 1。
例如10&15
10的二進(jìn)制序列為00000000 00000000 00000000 00001010
15的二進(jìn)制序列為00000000 00000000 00000000 00001111
他們都是正數(shù),原碼反碼補(bǔ)碼都相同,所以直接上下比較
得到 00000000 00000000 00000000 00001010 十進(jìn)制為10
#includeint main()
{int a = 10, b = 15;
printf("%d", (a & b));
return 0;
}
例如-10和-15
-10原碼10000000 00000000 00000000 00001010
反碼11111111 11111111 11111111 11110101
補(bǔ)碼11111111 11111111 11111111 11110110
-15原碼10000000 00000000 00000000 00001111
反碼 11111111 11111111 11111111 11110000
補(bǔ)碼 11111111 11111111 11111111 11110001
上下比較得到 11111111 11111111 11111111 11110000
轉(zhuǎn)化為原碼是 10000000 00000000 00000000 00010000
轉(zhuǎn)化為十進(jìn)制數(shù)是-16
#includeint main()
{int a = -10, b = -15;
printf("%d", (a & b));
return 0;
}
按位或( | )運(yùn)算編碼:補(bǔ)碼
將整數(shù)從十進(jìn)制轉(zhuǎn)化為二進(jìn)制數(shù),上下比較,有1則1 ,兩個都是 0 才是 0。
例如10 | 15
10的二進(jìn)制序列為00000000 00000000 00000000 00001010
15的二進(jìn)制序列為00000000 00000000 00000000 00001111
他們都是正數(shù),原碼反碼補(bǔ)碼都相同,所以直接上下比較
得到 00000000 00000000 00000000 00001111
十進(jìn)制為15
#includeint main()
{int a = 10, b = 15;
printf("%d", (a | b));
return 0;
}
例如-10和-15
-10原碼10000000 00000000 00000000 00001010
反碼11111111 11111111 11111111 11110101
補(bǔ)碼11111111 11111111 11111111 11110110
-15原碼10000000 00000000 00000000 00001111
反碼 11111111 11111111 11111111 11110000
補(bǔ)碼 11111111 11111111 11111111 11110001
上下比較得到 11111111 11111111 11111111 11110111
轉(zhuǎn)化為原碼是 10000000 00000000 00000000 00001001
轉(zhuǎn)化為十進(jìn)制數(shù)是-9
#includeint main()
{int a = -10, b = -15;
printf("%d", (a | b));
return 0;
}
按位異或( ^ )運(yùn)算編碼:補(bǔ)碼
將整數(shù)從十進(jìn)制轉(zhuǎn)化為二進(jìn)制數(shù),上下比較,上下比較,相同為 0 ,相異為 1
例如0 ^ 15
10的二進(jìn)制序列為00000000 00000000 00000000 00001010
15的二進(jìn)制序列為00000000 00000000 00000000 00001111
他們都是正數(shù),原碼反碼補(bǔ)碼都相同,所以直接上下比較
得到 00000000 00000000 00000000 00000101
十進(jìn)制為5
#includeint main()
{int a = 10, b = 15;
printf("%d", (a ^ b));
return 0;
}
例如-10和-15
-10原碼10000000 00000000 00000000 00001010
反碼11111111 11111111 11111111 11110101
補(bǔ)碼11111111 11111111 11111111 11110110
-15原碼10000000 00000000 00000000 00001111
反碼 11111111 11111111 11111111 11110000
補(bǔ)碼 11111111 11111111 11111111 11110001
上下比較得到 00000000 00000000 00000000 00000111
轉(zhuǎn)化為原碼是 00000000 00000000 00000000 00000111
轉(zhuǎn)化為十進(jìn)制數(shù)是7
#includeint main()
{int a = -10, b = -15;
printf("%d", (a ^ b));
return 0;
}
希望我的博客對你的學(xué)習(xí)有幫助
IDE VS2022
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
名稱欄目:【C語言】移位操作符和位操作符-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://jinyejixie.com/article18/dcggdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司、電子商務(wù)、定制開發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容