利用二進位制解決一些問題

2021-08-07 04:47:43 字數 1536 閱讀 7246

一 0和1 簡單規則:

二、 簡單題目總結:

1 已知數n,檢測其k位(二進位制)是否置位(是否為1)

n&(1說明: 

1 左移 k-1位,變為 第k位為1,其他的位置為0.

根據公式a和公式c, n的二進位制除k位之外,均變成0,而第k位與1 &之後,原來是什麼還是什麼。

如果是1,則結果一定大於0.如果是0.則最終的結果就是0.

2 給定乙個運算元,將其k位置位

可以使用下面的表示式

變為1,可以使用公式d

n|1<

3 給定運算元,將第k位清零清零應該使用公式a

n&~(1<4 切換第k位切換一般使用 異或

n^(1<5 檢查某個數是否是2的冪給定乙個數檢查是否是2的n次方,可以使用表示式

if(n&n-1==0)如果true則表示為2的n次方。

6 找到給定運算元n的模

如果是n是2的冪,則可以用下面的表示式 m&(n-1)

7 計算n中1的個數

方法1: 迴圈右移n,每個數和1進行&,結果為1,則表示為1
int n,count=0;

while(n)

方法2 使用取模操作
while(n)

n=n/2;

}

方法3 使用切換法

while(n){

count++;

n=n&(n-1)

8反轉二進位制數對二進位制數n進行反轉的步驟是:

定義 int nreverse = n;

第一:nreverse左移 空出最右邊的1位。

第二;取出n的最右邊的一位, n&1

第三:將上面的值放到nreverse的右邊。nreverse = nreverse| n&1 。

第四,將n右移,接下來迴圈,來處理n的第二位。

int  s= sizeof(n);

for(;n;n>>=1)

nreverse <<=s;

交換二進位制的奇偶位

n=01001011;

找出運算元的奇數字 n&0xaa

找出運算元的偶數字 n&0x55

奇數字右移1位

偶數未右移1位

將兩個數進行或操作。

二進位制的一些操作

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 ...

二進位制問題

題目 題解 純二進位制題目。因為所有的水都是由兩份相同的水合併而成的,因此每瓶水的體積一定是2 i,i in n 2 i i n 公升。最後保留k個瓶子,那麼最後總的公升數的二進位制表示中,1的個數一定 k。本題實質上是用不超過k個1和無數個0生成乙個最接近且大於n的二進位制數 方法一 includ...

關於二進位制的一些總結

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