main( )
左移一位等於乘以2 得到080 因為是八進位制,所以進一 0100 輸出按照8進製輸出,所以輸出100;
計算機區分:普通數,十進位制,前面加0x的是十六進製制,前面加0的,是八進位制。
八進位制由數字0-7組成表達方式由數字0開頭
位運算操作符:
1、&:位邏輯與
2、 |:位邏輯或
3、^:位邏輯異或
4、~:位邏輯反
5、>>:右移
6、<<:左移
位運算是對位元組或字中的實際位進行檢測、設定或者移位,它只適用於字元型和整數型變數以及它們的變體,對其他資料型別不適用。
(1)& 邏輯與的運算規則:當進行兩個數的邏輯與運算時,先將該兩個數化為二進位制,然後進行邏輯與運算,當相同位的數只有當雙方都為1時,結果才為1,否則為0。
a=5;
b=4;
c=a%b;
c=4;-------------- a=5=0101 b=4=0100 a&b=0100=4
(2) | 邏輯或的運算規則:當進行兩個數的邏輯或運算時,先將該兩個數化為二進位制,然後進行邏輯或運算,當相同位的數只要有一方為1,結果就為1,否則為0。
a=2;b=9;
c=a|b; a=2=0010; b=9=1001 c=1011=11
(3)邏輯異或的運算規則:當進行兩個數的邏輯異或運算時,先將該兩個數化為二進位制,然後進行邏輯異或運算,當相同位的數只有當雙方都為不同數字時,結果才為1,否則為0。
a=6;b=8; c=a^b ; a=0110 b=1000; 0110^1000=1110=14;
(4)邏輯反的運算規則:當進行乙個數的邏輯反運算時,先將這個數化為二進位制,然後進行邏輯反運算,當數為1時,結果為0,當數為0時結果為1。
a=12;b=~a: 12=1100;~1100=0011=3
按照上面的運算規則,我們先將12轉換為二進位制,為1100,進行位邏輯反運算,則為0011,化為十進位制數結果應為3才對啊,那為什麼測試的結果是-13呢?
原來啊,在計算機中,二進位制的儲存方式是以補碼的形式儲存的。
所以,12在計算機內儲存的是01100(第乙個0位符號位,代表這個數是正數),對其進行邏輯反運算則為10011,但這個二進位制只是b這個變數在計算機內的儲存形式(即b的補碼形式),所以我們需要將其轉換為原碼形式,由於符號位為1,為負數,所以我們先對10011轉換為反碼,即11100,再對其進行+1,所以結果為11101,轉換為十進位制數則為-13。所以b=-13。
正數原碼、反碼、補碼 三碼合一
負數的原碼轉換為補碼為 符號位不變 數值位按位取反 末位加一
負數,補碼的補碼等於原碼 反碼為正 三碼合一
(5)右移操作運算規則:左邊空出的位用0或者1填補。正數用0填補,負數用1填補。注:不同的環境填補方式可能不同;低位右移溢位則捨棄該位。
a=127,轉換為二進位制為01111111,由於二進位制在計算機內部是以補碼的形式進行儲存,但由於127是正數,所以其補碼為01111111,對該補碼進行右移操作運算,按照運算規則,得到00011111,轉換為原碼,依舊為00011111,轉換為十進位制數為31,所以,b=31。
對多組資料進行測試,我們可以得到這樣乙個規律:
當乙個數進行n位的右移操作後,所得到的新的數=被運算元/2^n.
(6)左移運算操作規則:右邊空出的位用0填補,高位左移溢位則捨棄該高位。
a=-127,轉換為二進位制為1000 0111 1111,轉換為反碼為1111 1000 0000,轉換為補碼是1111 1000 0001,對其進行左移三位的操作,得到:1100 0000 1000,將其轉換為反碼:1100 0000 0111,再將其轉換為原碼:1011 1111 1000,轉換為十進位制數,為-1016,所以b=-1016。
對多組資料進行測試,我們可以得到這樣乙個規律:
當乙個數進行n位的左移操作後,所得到的新的數=被運算元*2^n.
進製轉換,指標前奏,奇偶互換,左移,右移
1個位元組又是8位二進位制數 1kb 8b int a 010 010 0開頭是八進位制 0b開頭是二進位制 0x開頭是十六進製制 printf x a o列印八進位制 x列印十六進製制 位運算子,先換成二進位制數然後再計算 按位與 同為1,則為1,否則為0 printf d n 7 5 按位或 只...
左移與右移
1 include 2 include 3 include 4 using namespace std 5 typedef unsigned char byte 6 intmain 以上的實驗說明計算機中負數是以補碼的形式存在的。而且無論是負數還是整數左移就相當於乘以2,右移就相當於除以2。左移時,...
測試左移與右移
大家熟悉的測試工作 也是傳統的瀑布式 是接到專案後參與需求評審,然後根據需求文件寫寫用例和準備指令碼,等開發提測之後正式開始測試 提bug 回歸,測試通過後就結束了,專案交給運維上線,之後投入下乙個專案繼續重複這樣的流程。這樣的流程看似沒什麼問題,但缺點是 測試左移以及測試右移,能夠讓測試擁有更多的...