二進(jìn)制轉(zhuǎn)十進(jìn)制
0011 1001
2^(6-1) + 2^(5-1) + 2^(4-1) + 2^(1-1) = 32 + 16 + 8 + 1 = 57
十進(jìn)制轉(zhuǎn)二進(jìn)制(短除2)
除數(shù) | 商 | 余數(shù) |
---|---|---|
2|57 | 28 | 1 |
2|28 | 14 | 0 |
2|14 | 7 | 0 |
2|7 | 3 | 1 |
2|3 | 1 | 1 |
2|1 | 0 | 1 |
將余數(shù)從下往上數(shù):111001
按位與 &
兩位全為1,結(jié)果才為1
6 & 3 -> 0110 & 0011 -> 0010 = 2
用法:
- 清零威蕉。如果想將一個(gè)單元清零最住,即使其全部二進(jìn)制位為0祖凫,只要與一個(gè)各位都為零的數(shù)值想與菇肃,結(jié)果為零
- 取一個(gè)數(shù)中指定位
eg: 設(shè)x = 1010 1110扰才,取x的低四位同波,用x & 0000 1111 = 0000 1110即可得到
按位或 |
只要有一個(gè)為1鳄梅,結(jié)果就為1
6 | 3 -> 0110 | 0011 -> 0111 = 7
用法:
用來(lái)將一個(gè)數(shù)據(jù)的某些位置為1
eg:將 x = 1010 0000 的低四位置1,用x | 0000 1111 = 1010 1111即可得到
異或運(yùn)算 ^
兩個(gè)相應(yīng)的為不同未檩,則該位結(jié)果為1戴尸,否則為0
0 ^ 0 = 0; 1 ^ 0 = 1; 1 ^ 1 = 1;
6 ^ 3 -> 0110 ^ 0011 -> 0101 = 5
用法:
- 使特定位翻轉(zhuǎn)
eg: 將x = 1010 1110 低4位翻轉(zhuǎn),用x ^ 0000 1111 = 1010 0001即可得到 - 與0相異或冤狡,保留原值
eg: x ^ 0000 0000 = 1010 1110
兩個(gè)變量交換值的方法:- 借助第三個(gè)變量:
tmp = A; A = B; B = tmp
- 使用位異或運(yùn)算:
A = A ^ B; B = A ^ B; A = A ^ B;
- 借助第三個(gè)變量:
取反運(yùn)算 ~
對(duì)一個(gè)二進(jìn)制數(shù)按位取反孙蒙,即將0變?yōu)?,1變?yōu)?悲雳。
~1 = 0; ~0 = 1;
左移運(yùn)算 <<
將各二進(jìn)制位全部左移若干位(左邊的二進(jìn)制丟棄挎峦,右邊補(bǔ)0)
3 << 2 = 3 * 2 * 2 = 12;
若左移時(shí)舍棄的高位不包含1,則每左移一位合瓢,相當(dāng)于該數(shù)乘2
???-14(1111 0010) << 2 = 1100 1000
11(1011) << 2 = 44
(11是int類型坦胶,屬于32字節(jié),實(shí)際上是00000000 00000000 00000000 00001011)
右移運(yùn)算 >>
將各二進(jìn)制位全部右移若干位,正數(shù)左補(bǔ)0顿苇,負(fù)數(shù)左補(bǔ)1峭咒,右邊丟棄。操作數(shù)每右移一位纪岁,相當(dāng)于該數(shù)除以2
3 >> 1 = 3 / 2 = 1
-14(1111 0010) >> 2 = -4(1111 1100)
無(wú)符號(hào)右移運(yùn)算 >>>
將各二進(jìn)制位全部右移若干位凑队,左補(bǔ)0,右邊丟棄
-14(11111111 11111111 11111111 11110010) >>> 2 = 1073741820(00111111 11111111 11111111 11111100)
負(fù)數(shù)以其正值的補(bǔ)碼形式表示
原碼:一個(gè)整數(shù)按照絕對(duì)值大小轉(zhuǎn)換成的二進(jìn)制數(shù)
eg: 00000000 00000000 00000000 00001110是14的原碼
反碼:將二進(jìn)制數(shù)按位取反幔翰,所得的新二進(jìn)制數(shù)稱為原二進(jìn)制數(shù)的反碼
eg: 11111111 11111111 11111111 11110001和14互為反碼
補(bǔ)碼:反碼加1稱為補(bǔ)碼
eg: 11111111 11111111 11111111 11110001 + 1 = 11111111 11111111 11111111 11110010(即-14)
所以漩氨,-14(11111111 11111111 11111111 11110010) << 2 = x(11111111 11111111 11111111 11001000)
x為補(bǔ)碼,減1得到反碼(11000111)遗增,再取反得到原碼為(00111000)叫惊,計(jì)算正值為56,所以x = -56