如何判斷二進位制中有奇數個1還是偶數個

2021-08-11 06:06:22 字數 3509 閱讀 5797

1樓:匿名使用者

將x中的所有位逐位進行異或操作,如果有奇數個1,異或的結果將為1,如果有偶數個1,異或的結果將為0。

2樓:

bool oddones(int x)

return cnt & 1;

} 先求x二進位制中1的個數,方法就是通過x &= x-1去掉最右端的1,直到x變為0,去掉了幾次1就是原x二進位制中含有多少個1;然後確定個數為奇數還是偶數。

下面是利用位運算來得到結果:

bool oddones(int x)

3樓:

判斷(32位)整數的二進位制表示中的1有奇數個還是偶數個最直接的思路就是求二進位制數中1的個數,然後確定是偶數還是奇數。

**如下:

[cpp] view plaincopy

// true為x二進位制表示中含有奇數個1,false為偶數個1bool oddones(int x)

return cnt & 1;

} 上述**的就是先求x二進位制中1的個數,方法就是通過x &= x-1去掉最右端的1,直到x變為0,去掉了幾次1就是原x二進位制中含有多少個1;然後確定個數為奇數還是偶數。

下面是利用強大的位運算來得到結果:

要求彙編:用“與”運算判斷某8位二進位制數是奇數還是偶數個1。 (微控制器作業……)

4樓:楊必宇

二進位制數只是正數的話,那百麼只看末尾的數字就行了,如果是0,那麼就是偶數,如果是1,那麼就是奇數。

因為,除過末尾數字,其他數字都是當前位乘以2^n後的結果,那麼不管是偶數還是奇數,只要乘了2,都會是偶數,偶數加度偶數還是偶數。因此,只要判問斷末尾數字的奇偶就行了,當然,如果二進位制數是負數的話,那麼就得轉化成原碼再看。

擴充套件資料

常用的有二進位制、八問進位制、十進位制、十六進位制。任何資料在計算機記憶體中都是以二進位制的形式存放的。二進位制數是以2為計算單元,滿內2進1位的數;八進位制數是以8為計算單元,滿8進1位的數。

對於任何一個數字,都可以用不同的容進位制來表示,比如,十進位制數12,用二進位制表示為1100,用八進位制表示為14,用十六進位制表示為0xc。

5樓:勤奮的哈七八答

假設r3中存放待判數值,r4存放臨時結果。如果暫存器不足,就用記憶體代替。 mov r0,1,mov r1,0 //1個數計數器,mov r2,0 //迴圈次數,共迴圈8次。

label_loop,cmp r2,8 //迴圈次數比較,be loop_end //如果已經迴圈8次則跳轉到loop_end。

and r4,r3,r0 //r3,r0按位與運算,結果存入r4,cmp r4,0 //依次取出相應的位與0比較,be loop_next //若相等則跳轉到loop_next,否則計數器加1再跳轉inc r1,b loop_next//到這裡結束了,r1如果等於1那麼有奇數個“1”,否則偶數個“1”。

由於共有8位數,最多0b1000個"1",只有r1最低位為1時才是奇數個“1”,微控制器中似乎沒有三個運算元的指令。

6樓:千葉郎君

arm的彙編還可以,微控制器的沒學過。

以下是偽**,翻譯成微控制器彙編即可。

//假設r3中存放待判數值,r4存放臨時結果。如果暫存器不足,就用記憶體代替。

mov r0,1

mov r1,0 //1個數計數器

mov r2,0 //迴圈次數,共迴圈8次

label_loop:

cmp r2,8 //迴圈次數比較

be loop_end //如果已經迴圈8次則跳轉到loop_end

and r4,r3,r0 //r3,r0按位與運算,結果存入r4

cmp r4,0 //依次取出相應的位與0比較

be loop_next //若相等則跳轉到loop_next,否則計數器加1再跳轉

inc r1

b loop_next

loop_next:

inc r2

shl r0 //r0左移一位,以便取出下一位

b label_loop

loop_end:

and r1,r1,1 //r1中存放了"1"的個數

cmp r1,1

...//到這裡結束了,r1如果等於1那麼有奇數個“1”,否則偶數個“1”

由於共有8位數,最多0b1000個"1",只有r1最低位為1時才是奇數個“1”

大概微控制器中似乎沒有三個運算元的指令, 像and r4,r3,r0,自己再單獨實現以下吧

怎麼快速判斷一個二進位制數是奇數還是偶數,舉例說明

7樓:匿名使用者

這個二進位制的最低位是1就是奇數,是0就是偶數因為二進位制的位數(由低到高)分別代表著

回1,2,4,8,16,32,64,128,256,512,1024.

只有最低答位的這個是1或0

所以二進位制最低位為1時,就是奇數

給定一個二進位制數,怎樣快速判斷其十進位制等指數是奇數還是偶數?

8樓:鷹的飛翔

二進位制來數只是正數的話,那麼只看

源末尾的bai

數字就行了,如果是du0,那麼zhi

就是偶數,如果是1,那麼就是dao奇數。

1.因為,除過末尾數字,其他數字都是當前位乘以2^n後的結果,那麼不管是偶數還是奇數,只要乘了2,都會是偶數,偶數加偶數還是偶數。

2.因此,只要判斷末尾數字的奇偶就行了,當然,如果二進位制數是負數的話,那麼就得轉化成原碼再看。

3.二進位制轉十進位制,從最後一位開始算,依次列為第0、1、2...位 ,第n位的數(0或1)乘以2的n次方,得到的結果相加就是答案,二進位制01101011=十進位制107。

4.二進位制是計算技術中廣泛採用的一種數制,二進位制資料是用0和1兩個數碼來表示的數。

5.它基數為2,進位規則是逢二進一,借位規則是借一當二,只要一個數中各位上數最大不超過1,就可能是二進位制數,否則一定不是二進位制數。

怎麼快速判斷一個二進位制數是奇數還是偶數,舉例說明

9樓:匿名使用者

看最後一位數 因為二進位制是2的倍數,決定奇偶由最後一位決定 是0則是偶數 是1則是奇數

10樓:匿名使用者

這個二進位制的最低位是1就是奇數,是0就是偶數因為二進位制的位數(由低到高)分別代表回著1,答2,4,8,16,32,64,128,256,512,1024.......

只有最低位的這個是1或0

所以二進位制最低位為1時,就是奇數

11樓:燃燒者韋布

看最後一位。

根據二進位制的原理 一個二進位制的數對應的十進位制書的演算法為:

2^n+2^n-1......+2^2+2^1+2^0所以末位為1的是奇數,末位為0的是偶數。

二進位制如何轉換成八進位制二進位制怎麼轉化成其他進位制詳細過程

先了解二進位制 數與八進位制數之間的對應關係。有個方法,把二進位制的數從右往左,三位一組,不夠補0 列 111 4 2 1 7 11001拆分為 001和011,001 1,011 2 1 3 那麼11001轉換為八進位制就是31.擴充套件資料二進位制轉換為十六進位制 參照二進位制轉八進位制,但是它...

二進位制的負數如何算,二進位制的負數如何算?

在二進位制碼中,採用最高位是符號位的方法來區分正負數,正數的符號位為0 負數的符號位為1。剩下的就是這個數的絕對值部分。通過將負數轉為二進位制原碼,再求其原百碼的反碼,最後求得的補碼即負數的二進位制表示結果。比如整數 1。先取1的原碼 00000000 00000000 00000000 00000...

二進位制如何表示負數啊負數用二進位制怎麼表示呀?

在二進位制碼中,採用最高位是符號位的方法來區分正負 數,正數的符號位為0 負數的符號位為1。剩下的就是這個數的絕對值部分。通過將負數轉為二進位制原碼,再求其原碼的反碼,最後求得的補碼即負數的二進位制表示結果。比如整數 1。先取1的原碼 00000000 00000000 00000000 00000...