如何判断二进制x中有奇数个1还是偶数个1

作者&投稿:并从 (若有异议请与网页底部的电邮联系)
如何判断二进制x中有奇数个1还是偶数个1~

bool OddOnes(int x)
{
int cnt = 0;
while(x)
{
cnt++;
x &= x-1;
}
return cnt & 1;
}
先求x二进制中1的个数,方法就是通过x &= x-1去掉最右端的1,直到x变为0,去掉了几次1就是原x二进制中含有多少个1;然后确定个数为奇数还是偶数。
下面是利用位运算来得到结果:
bool OddOnes(int x)
{
x = x ^ (x >> 1);
x = x ^ (x >> 2);
x = x ^ (x >> 4);
x = x ^ (x >> 8);
x = x ^ (x >> 16);
return x & 1;
}

假设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”,单片机中似乎没有三个操作数的指令。

扩展资料:
在以上的程序代码中,考虑到单片机系统的RAM限制,不能像一些实时OS那样将任务栈建立在RAM中。
将任务栈建立在代码的空间,因而不能在程序运行的时候,动态地加入任务,因此要求在程序编译时,任务栈已经确定。
同时,定义一组计数值旗标time_val,记录程序运行时的时间量,并在一个定时器中断中对其进行刷新。时间片刷新中断过程语句Time_Counter:=Time_Unit;中的Time_Unit,可以改变系统时间片的刷新粒度,一般这个值由系统的最小时间度量值确定。
同时,由任务的执行流程可知,此种系统构造并没有改变其前/后台系统的性质,只是对后台逻辑操作序列进行了有效管理。同时,如果将任务执行流程进行一些更改,并保证时间片小的任务前置。

将X中的所有位逐位进行异或操作,如果有奇数个1,异或的结果将为1,如果有偶数个1,异或的结果将为0。

判断(32位)整数的二进制表示中的1有奇数个还是偶数个
最直接的思路就是求二进制数中1的个数,然后确定是偶数还是奇数。
代码如下:

[cpp] view plaincopy
// true为x二进制表示中含有奇数个1,false为偶数个1
bool OddOnes(int x)
{
int cnt = 0;
while(x)
{
cnt++;
x &= x-1;
}
return cnt & 1;
}
上述代码的就是先求x二进制中1的个数,方法就是通过x &= x-1去掉最右端的1,直到x变为0,去掉了几次1就是原x二进制中含有多少个1;然后确定个数为奇数还是偶数。
下面是利用强大的位运算来得到结果:

bool OddOnes(int x)
{
int cnt = 0;
while(x)
{
cnt++;
x &= x-1;
}
return cnt & 1;
}
先求x二进制中1的个数,方法就是通过x &= x-1去掉最右端的1,直到x变为0,去掉了几次1就是原x二进制中含有多少个1;然后确定个数为奇数还是偶数。
下面是利用位运算来得到结果:
bool OddOnes(int x)
{
x = x ^ (x >> 1);
x = x ^ (x >> 2);
x = x ^ (x >> 4);
x = x ^ (x >> 8);
x = x ^ (x >> 16);
return x & 1;
}


设X=ABCD是一个四位二进制整数(0≦X≦1111),设计电路判断0≦X<10?
X<10 ---> X<1010,即:ABCD=1111,1110,1101,1100,1011,1010,这些值要排除;就是:F = AB+AC;F=1 表示 X>9了;

计算机二进制中知道X的补码,怎么求-X的补码
负数:符号位为1,各数值位取反,最低位加1。或:符号位为1,数值部分从高位到低 位取反,直到最后一个“1”前。便可得到【-X】的补码为0.1101 再比如X=0.1101,求【-X】补码 先求 -X=-0.1101,原码即为1.1101,根据补码规则,【-X】补码=1.0011 注:在计算机寄存器中是不显示小数点的...

设二进制数x的值是11001101,若想通过x&y运算使x中的低4位不变,高4位...
unsigned char x,y,z;x=0xcd; \/\/ 11001101 y=0x0f; \/\/ 00001111 z=x&y;与运算是二进制按位运算, 将x和y两个二进制数逐位对齐后, 对齐的8个位分别单独运算得到结果的8个位, 要使某位清0, 就与0进行与运算, 如果不变就与1进行与运算....

判断奇偶性
要对整数n判断,则可以:if(n%2==0) \/\/可以整除为偶数\/\/这里判断可以写作 !(n%2) 等效。或 if(n%2==1) \/\/不能整除为奇数。\/\/这里判断也可以写作n%2,或者n%2!=0,都是等效的。三、最高效的判断方式:计算机中都是以二进制存储,而判断是否可以被2整除,实际上只需要判断二进制最后一...

3. 已知二进制数x= 0.1010,y= -0.0110, 用原码一位乘法计算[x*y]原...
已知二进制数x= 0.1010,y= -0.0110, 用原码一位乘法计算[x*y]原,[X、Y]原=1.01111000,真值为:-0.01111000B。二进制的“00101000”直接可以转换成16进制的“28”。字节是电脑中的基本存储单位,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位。

C语言,哪位好心的大哥,姐姐:能告述我位运算吗?我看不懂啊!
注意C中的逻辑运算和位运算符号是不同的。520|1314=1834,但520||1314=1,因为逻辑运算时520和1314都相当于True。同样的,!a和~a也是有区别的。 各种位运算的使用 === 1. and运算 === and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制...

世界上有哪几种进制数?
进制有:十进制、二进制、四进制、七进制、八进制、十二进制、十六进制。基数就是一种进制中可使用数字符号的数目称为基数(en:radix)或底数。进制数中对应的基数分别为:十进制的基数为10、二进制的基数为2、四进制的基数为4、七进制的基数为7、八进制的基数为8、十二进制的基数为12、十六进制的基数...

二进制数组中如何使用最简便的方法表示1的个数和所处的位置
反而还增加了数据量。这里就不把具体的编码过程用代码方式写在这儿了,仅提供算法思路。另外,对于要判断某位是否为1,或者哪些位为1,只要顺序扫描以上编码就可以容易地得到了。上面没有说得特别详细,主要是不能确定这是否是你关心的问题,如果是,或者你想要更具体的方法,可以另外再联系。

C语言中x^y是什么意思?
x^y的意思是按位异或,当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0。也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法...

设二进制数x的值是11001101,若想通过x&y运算使x中的低4位不变,高4位...
y=00001111(b)就OK啊

兴国县15154245382: 如何判断二进制x中有奇数个1还是偶数个1 -
赵耐典比:[答案] 将X中的所有位逐位进行异或操作,如果有奇数个1,异或的结果将为1,如果有偶数个1,异或的结果将为0.

兴国县15154245382: 怎么快速判断一个二进制数是奇数还是偶数,举例说明 -
赵耐典比:[答案] 这个二进制的最低位是1就是奇数,是0就是偶数 因为二进制的位数(由低到高)分别代表着1,2,4,8,16,32,64,128,256,512,1024. 只有最低位的这个是1或0 所以二进制最低位为1时,就是奇数

兴国县15154245382: 给定一个二进制数,怎样能够快速地判断出其十进制等值数是奇数还是偶数? -
赵耐典比:[答案] 看二进制数末位是0还是1,0就是偶数,1就是奇数

兴国县15154245382: 计算机基础:关于二进制的末尾一位判断奇偶数求解二进制的最低位是1就是奇数,是0就是偶数,因为二进制的位数(由低到高)分别代表着1、2、4、8、... -
赵耐典比:[答案] 就是从二的零次方,二的一次方,二的二次方.一直到二的N次方啊,所以就是1,2,4,8,16.二的零次方对应1,二的一次方对应2..以此类推

兴国县15154245382: 给定一个二进制数,怎么能够迅速地判断出其十进制等值数十奇数还是偶数 -
赵耐典比: 看它的最低位,如果是0,则该二进制数一定是偶数, 如果是1,则该二进制数一定是奇数.

兴国县15154245382: 数据怎样进行奇偶校验 -
赵耐典比: 奇偶校验数据是一种简单的数据校验方法,顾名思义就知道有两种方式:奇校验和偶校验.因为计算机里面的数据形式都是通过1 和 0来存储和传输的,那么就可以通过检验一个数据串的1 的个数来判断这个数据串是否出错.假如传输方传输的数据有奇数个1 而接收方有偶数个1 那么数据肯定出错,就可以要求对方再传送一遍. 而怎么标志传送的数据有多少个1 呢?一般的做法是在数据串的最后一位补上一个奇偶校验位,如果有奇数个1 这个校验位是1 则叫奇校验,否则叫偶校验.好了,说完了.希望能解决你的问题.

兴国县15154245382: c语言判断二进制数的奇偶性 -
赵耐典比: 这个很简单,二进制数的末位如果是1就是奇数,如果是0就是偶数.

兴国县15154245382: 单片机编程 运用“与”运算,判断某8位二进制数是奇数还是偶数个1 -
赵耐典比: 51单片机可以不用与运算,只接判断,用P(奇偶校验位),如果非得用与运算只能这样: MOV A,#0FFH ANL A,#DATA;某数) JNB P,REL

兴国县15154245382: 给定一个二进制数,怎么样能快速的判断出气十进制等值是奇数还是偶数 -
赵耐典比: 看二进制数的最低位的情况,最低位为0,即为偶数;为1,即为奇数

兴国县15154245382: 编写程序,采用“与”运算,判断某8位二进制数是奇数还是偶数个1 -
赵耐典比: 将该8位二进制数和01h相与,然后根据标志位zf的值,判断该8位二进制数是奇数还是偶数.若zf=0,为奇数,若zf=0,为偶数.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网