進製和位運算典型題目

2021-09-20 15:40:26 字數 2102 閱讀 3366

原碼:正數的二進位制數表示就是原碼。

負數的原碼按照絕對值大小轉換成的二進位制數,然後最高位補1。

反碼:正數的反碼和原碼相同。

負數的反碼和除符號位按位取反。

補碼:正數的補碼和原碼相同。

負數的補碼為反碼加1。

計算機中,採用補碼表示和儲存。

為什麼採用補碼:

由於計算中的cpu只有加法器,沒有減法器,所以在計算機採用原碼做減法是會存在這樣的問題:對於1-1=0。

看做1+(-1)=0 二進位制表示 0001+1001=1001 變成了十進位制的負1而不是0。採用補碼運算,則補碼加法成為:[x+y]補 = [x]補 + [y]補,補碼的減法變為:[x-y]補 = [x]補 - [y]補 = [x]補 + [-y]補 。(0001)補+(1001)補 = 0001 + 1111 = 0000 (最高位的進製省略),這樣就順利得到了0。

無符號數:

無符號數即為每一位都用於存放數值,暫存器的位數為機器字長,機器字長16位,無符號數範圍為0-65535。

有符號數:

最高位用於表示符號,其他位用於表示數值,機器字長16位,有符號數範圍為-32768~+32767。(我們人為規定1000 0000 0000 0000為-32768)

左移:m右移:m>>n,把m右移n位,右面n位被丟棄,正數左面補0,負數左面補1

除法比位運算效率低很多

2、求二進位制中1的個數

int

digit

(int num)

return count;

}

2、一條語句判斷乙個整數是不是2的整數次方

return

(!(num

&(num

-1)==0));

3、輸入n和m,計算把m的二進位制改變多少個位可以得到n

int

digit

(int m,int n)

return count;

}

4、十進位制轉成七進製

class

solution

while(num>0)

reverse(str.begin(), str.end());//將字串翻轉

return str;

}string

converttobase7

(int num)

//正數和負數分開處理

else

//負數就在返回之前加乙個負數

return str; }//返回str

};

5、判斷二進位制0和1是不是交替出現的

class

solution

flag=n%2;

n/=2;

}return

true;//迴圈結束就是交替出現的}};

6、將區間內的所有數字按位與

class

solution

for(res=n;res>m;)

} return res;}};

7、十進位制轉十六進製制

string tohex(int num)

string hex = "0123456789abcdef";

string ans = "";

while(num && ans.size() < 8)

return ans;

}

位運算和進製轉換

位運算指的是對二進位制進行的計算處理。主要有 與 或 異或 求反 其特徵為 都是1的時候才是1 如 13 7 計算過程為 13的二進位制 1101 7的二進位制 0111 得到結果 0101 轉換成10進製則是5 計算過程為 1101 0111 按照或運算得到結果是 1111 轉化成10進製為 15...

筆記 Java 進製和位運算

二進位制 只有0和1組成的一組數成為二進位制數,計算機中的資料都是以二進位制形式進行儲存的。通常乙個二進位制數最高位是1,那麼對應的十進位制數為負數,如果最高位是0,那麼對應的數是正數 八進位制 乙個二進位制數表示成八進位制數,將該二進位制數從右到左每三位一組,每一組算出對應的十進位制數,每組對應的...

c語言 進製和位運算

一.進製 十進位制轉n進製 連除倒取餘.以 10 為例,不同進製的表示方法 十進位制 10 二進位制 0b1010 八進位制 010 十六進製制 0x10 int a 100 printf o a 如何輸出進製數 d 十進位制 o 八進位制 0x 十六進製制 位運算子 按位與 按位或 按位非 按位異...