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