在做藍橋杯真題的時候發現了一種求二進位制的很厲害的求法,先看**,i表示二進位制數。
1void tobinarystr(int i, string &ans)212
}13}14
else
1523}24
}2526 }
對於正數的二進位制,高位一定是0(string從左往右依次表示高位到低位),因為正的二進位制數以八位為例,最大表示為127,二進位制就是01111111. **中 ((i >> j) & 1) == 1
意思是取i的第j個二進位制位是否是一從而可以直接給string陣列 ans 直接賦值。
對於負數的二進位制,高位一定是1,因為八位所能表示最小二進位制數是-128,即11111111,所以 (((128+i) >> j) & 1) == 1
,這就相當於對i取模,讓i加128變為正,為什麼這樣呢?
舉個例子:127的二進位制是011111111,而-1的二進位制是什麼呢,首先變為+1,二進位制為00000001,按位取反11111110,加一11111111,所以看-1的後邊七個低位,與127的七個低位一樣,都是11111111,所以我們就可以直接把負數的高位賦值為1然後索引(i+128)的二進位制的七個低位即可。
正負數二進位制
1 原碼 乙個正數的原碼,是按照絕對值大小轉換成的二進位制數 乙個負數的原碼,是按照絕對值大小轉換成的二進位制數,然後最高位補1。2 反碼 正數的反碼與原碼相同 負數的反碼為對該數的原碼除符號位外各位取反 原為1,取反為0 否則相反 3 補碼 正數的補碼與原碼相同 負數的補碼為對該數的原碼除符號位外...
二進位制正負數的浮點表示法
以實數 9.625 為例,來看看如何將其表達為單精度的浮點數格式。具體轉換步驟如下 1 首先,需要將 9.625 用二進位制浮點數表達出來,然後變換為相應的浮點數格式。即 9.625 的二進位制為 1001.101,用規範的浮點數表達應為 1.001101 23。冪次等於小數點移動的位數 2 其次,...
二進位制正負數的原碼 反碼 補碼之間的轉化
首先,計算機都是使用二進位制的補碼進行計算。1 正數的二進位制原碼 反碼 補碼都是相同的 2 負數的二進位制原碼 負數的絕對值的二進位制的最高位變為1 1是標誌位,只用來表示正負,1表示負數,0表示是正數。所以八位二進位制的取值範圍是 127,127 其餘位與正數原碼相同。比如 32 第一步 32 ...