位运算的运算规则是什么?比如说负整数的按位求或、按位求异或怎么求?见补充:

嘉儿20052022-10-04 11:39:541条回答

位运算的运算规则是什么?比如说负整数的按位求或、按位求异或怎么求?见补充:
按位求或:
(-3^2)我算的跟计算机算的结果一致:-1;可是(3^-2)我算的是:-1,而计算机算的是-3,怎么具体是怎么算的啊?
(-3^-2)的结果应该跟(3^2)一样都是:为什么计算机算的却是:
3^~2)的结果为什么会跟(3^2)一样啊?

已提交,审核后显示!提交回复

共1条回复
挪威森林_usa 共回答了19个问题 | 采纳率73.7%
首先,^是异或,不是或,异或是指位不同则为1
-3^2:-0011 ^ 0010(我以四位为例,实际一般是32位,和机器有关) 负数要用补码(除符号位外取反加1)计算,即 1011 取反加1 : 1101(-3补码), 1101 ^ 0010得 1111(补码),转原码,减1取反,即1110再取反,1001所以结果为 -1
而 3^-2,实际上是 0011^1110(-2,1010的补码) ,得1101(结果补码),减1取反,得1011(原码),-3
-3^-2,即 1101^1110,得0011,即3,而 3^2,即0011^0010,得,0001,即1
~表示取反,3为0011,~3就是1100,2为0010,~2就是1101, ~3^~2,即 1100^1101,得0001,即1.
1年前

相关推荐

c中 怎么判断一个十进制数x 的二进制的第i位是否为1,给个判断表达式就可以了,谢了 用位运算
我的热情烧开了水1年前1
戴面纱的男人 共回答了17个问题 | 采纳率82.4%
可以先将x右移i(i从0开始,即最低位的序号表示为0)位后将值赋给a,如果x的内存存储长度为一个字节的话,a&0x01得到的就是x的第i位,如果是1的话x的第i位就是1.如果x的内存存储长度为两个字节的话,那么用a&0x0001.
当然也可以不用位运算,直接对a模2,就可以直接得到结果了.
求位运算 主要有两点疑惑 1:怎么才能利用位运算 得到想要的结果 如X>>Y 与 X+Y相比前者得到的数据对
求位运算
主要有两点疑惑 1:怎么才能利用位运算 得到想要的结果 如X>>Y 与 X+Y相比前者得到的数据对我来说毫无意义2:#define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))解释下这个宏谢谢啦
wuyuanshr1年前1
Google测试员5672 共回答了16个问题 | 采纳率87.5%
位运算就是把操作数转换成二进制形式,相对应的位进行运算
有不同的位运算符:
&与,1&1为1 其余情况为0
|或,0|0为0 其余情况为1
^异或,相同为0,相反为1
~取反,0变为1 1变为0
>>右移
运用位运算,将字符型变量ch中的大写字母转换为小写字母,能讲一下思路吗,
永远的小女人_001年前1
ee牙舌屈 共回答了8个问题 | 采纳率100%
0x20就是 100000
他和十进制数65作或运算之后就是1100001,刚好是97,其它的转换类似.
算法:使用位运算判断两个数是否同为正,或同为负
算法:使用位运算判断两个数是否同为正,或同为负
网上给出的示例代码如下:
boolean isSameSign(int x,int y){ //有0的情况例外,^相同得0,不同得1
return (x^y)>= 0;//true表示x、y有相同的符号,false表示x、y有相反的符号
}
如果两个数都是正数,则二进制的第一位均为0,x^y=0
如果两个数都是负数,则二进制的第一位均为1,x^y=0
如果两个数符号相反,则二进制的第一位相反,x^y=1
但是为什么判断条件是>=0呢?难道还有小于0的情况?直接在0和1之前判断不就行了嘛?网上的示例是不是错了呢?
nhew11年前1
nclife 共回答了12个问题 | 采纳率75%
示例没有错,如果符号相反,那么异或之后所得数字符号为肯定为1,其他的非符号为取值可为0,可为1,那么此时得出的相异或的结果肯定是一个小于0的数据(最大为-1),反之如果符号相同,则符号为为0,最小为0,比较结果返回布尔值.示例代码没错的