要明白位運算是在二進位制中的運算方式,所有其他進製的數在進行位運算時都要先轉化成二進位制數再進行運算。
int 是 32位二進位制。有符號整型 :正數:0 負數:1
1:00000....0001
-1:10000.....0001
1.按位與(&)
只有當x,y都是1的時候,運算結果才是1,其餘情況都是0.
1&1=1 1&0=0;
例如5 & -5
5 : 0000 0000 0101
-5 :1111 1111 1011
答案 : 0000 0000 0001
2.按位或(|)
x,y中只要有乙個是1,結果就是1,其餘情況為0.
1|1=1 ,1|0=1;
例如5 & -5
5 : 0000 0000 0101
-5 :1111 1111 1011
答案 :1111 1111 1111
3.按位非(!)
!x 如果x為0,!x=1 ; x=1的話!x=0.
5
0000 0000 0101
答案:1111 1111 1010
4.按位異或(^)
x^y 相同是0,不同是1,
1^1=0 , 1^0=1 , 0^0=0 ;
5 ^ -5
0000 0000 0101
1111 1111 1011
答案: 1111 1111 1110
5.反碼(~)
按位取反
5 : 0000 0000 0101
~5 : 1111 1111 1010
6.補碼
(1)如果為正數:正數的補碼就等於原碼;
(2)如果為負數:負數的補碼就是在該數字的反碼上+1;(-x的補碼=~x+1)
-5的補碼
5的二進位制數 : 0000 0000 0101
5的反碼: 1111 1111 1010
最後再加1 : 1111 1111 1011
-5的補碼為: 1111 1111 1011
7.左移 右移
將乙個數二進位制下的數向左(向右)移若干位,
比如 x << y 就是將二進位制下的x 向左移 y 位.
比如 x >> y 就是將二進位制下的x向右移y位。
1<>x 100 10 01 4 2 1 右移就相當於除以2
其中除了取反( ~ )以外,其他的都是二目運算子,即要求運算子左右兩側均有乙個運算量。
1.a^b;
求 a 的 b 次方對 p 取模的值。
輸入格式:
三個整數 a,b,p ,在同一行用空格隔開。
輸出格式:
輸出乙個整數,表示a^b mod p的值。
資料範圍
0≤a,b,p≤109
資料保證 p≠0
輸入樣例:
3 2 7
輸出樣例:
2
**
#include
using namespace std;
int main()
2.64位整數乘法
求 a 乘 b 對 p 取模的值。
輸入格式
第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。
輸出格式
輸出乙個整數,表示a*b mod p的值。
資料範圍
1≤a,b,p≤1018
輸入樣例:
3
45
輸出樣例:
2
**
#include
using namespace std;
int main()
cout
}
位運算學習筆記
1.補碼 補碼是為了表示乙個負數的二進位制形式。其轉化方式是,先將負數當成正數,轉化成二進位制的形式,再將二進位制正數的各個位上取反,再加上 例如 5先求出5的二進位制數 0000 0000 0101 然後將各個位上0變1 1變0 1111 1111 1010 最後再加1 1111 1111 101...
位運算學習筆記
1 二進位制最高位是符號位 0代表正數,1代表負數 2 正數的原碼 反碼 補碼都相同 3 負數的反碼是將原碼符號位不變,其他位取反。4 負數的補碼是將反碼 1 5 0的原碼 補碼都是0 6 計算機中是依據補碼進行計算的。7 練習 1 2 例題說明 對2按位取反。由於2為正數,正數的原碼 補碼相等。所...
C語言位運算 學習筆記
位運算是指按二進位制位進行的運算,實際上就是直接對整數在記憶體中的二進位制位進行操作。二進位制通俗來說就是只有0和1兩個可用的數字來表示一切狀態,方便理解可以說成是一盞燈的開和關兩種狀態,狀態有何用?對計算機來說使用者輸入資料,然後顯示這個簡單的過程就需要人機互動,即使用者和計算機的溝通,也可以說是...