二進位制的一些操作

2022-07-30 11:06:12 字數 1255 閱讀 6710

<1>二進位制與十進位制互轉

十進位制轉二進位制

例子:13 -> 1101     

13/2=6餘1

6/2=3餘0

3/2=1餘1

1/2=0餘1

那麼13用二進位制表示為 1101 (倒序排列餘數 不足的用0補齊 00001101) 

二進位制轉十進位制   

例子:1101 -> 13  可以在c#裡面宣告為 int num = 0b1101 或者 string num = "00001101"

補齊00001101

13 = 0*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 0+0+0+0  +8+4+0+1

<2>位運算

~ 邏輯非運算 00001101 -> 11110010  即 1取0   0取1

& 邏輯與運算 00001101&00000011 -> 00000001 即1&1取1   1&0取0  0&0取0

| 邏輯或運算  00001101&00000011 -> 00001111 即1&1取1   1&0取1  0&0取0 

^ 邏輯異或運算 00001101&00000011 -> 00001110 即1&1取0   1&0取1  0&0取0   相同取0 不同取1

<< 左移運算 00001101 -> 01101000 即 把每一位向左移3位 等於把原始數字*2^3 = 13 * 2^3

>> 右移運算 00001101 -> 00000001即 把每一位向右移3位 等於把原始數字/2^3 = 13 / 2^3

<3>乙個在遊戲中的應用:使用0-7的二進位制表示8個方向

//0 0/2 = 00        0000  

//1 1/2 = 01        0001  //可以表示為z軸

//2 10 01            0010  //可以表示為y軸

//3 11 0              0011

//4 20 10 01       0100  //可以表示為x軸

//5 21 10 01       0101

//6 30 11 01       0110

//7 31 11 01       0111

//8 40 20 10 01 1000 與0-7做 | 運算  可以取交集

在八叉樹中,可以用0-7與1,2,4做&運算 取到父節點分割8個子節點的位置關係

複習二進位制位的一些操作

最近在學習資料結構感覺利用二進位制位來標記乙個數是否存在是特別節省空間的,比如點陣圖和布隆過濾器是效率比較高的。所以感覺有必要複習一下二進位制位的一些常用的操作。通過幾個例子來複習一下 一 寫乙個函式返回引數二進位制中 1 的個數 與運算 int count one bits size t valu...

關於二進位制的一些總結

5 00000000 00000000 00000000 00000101 原碼 乙個整數,按照絕對值大小轉換成的二進位制數 反碼 將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼 補碼 反碼加1稱為補碼 5 原碼 00000000 00000000 00000000 00000101...

二進位制補碼的一些思考

最近都一直在看幾本關於計算機組成原理方面的大作 code the hidden language of computer hardware and software computer system a programer perspective introduction to computer sy...