阿里地区一道面试题,求解释
阿里一道面试题,求解释
一道面试题,求大家解释一下
如下函数,在32bit系统foo(2^31-3)的值是:
Int foo(int x)
{
Return x&-x;
}
A: 0 B: 1 C:2 D:4
答案:C 2^31-3=2^(31-3)=2^28=30, 30&(-30)=2,30的二进制表示中1的最低位权值;
不知上面这个解法是什么原理。 另外自己理解 32bit中 2^31 应该是 -2^31 (32bit中 最大的负数), 那么-2^31-3 这个数在 计算机中将怎么表示呢?
求具体过程,谢谢
------解决方案--------------------
你不懂x&-x是干什么的话,那也直接把x=30带进去算就是了啊。
顺便^是xor。
------解决方案--------------------
运算符优先级
------解决方案--------------------
赞同楼上回答
------解决方案--------------------
x & (-x)的值为x最低位的值,比如x=6,那么它的值就为1100 => 100
其实-x = 2的32次方-x,做个减法就明了,比如8位计算机系统中,x=6
-6 = 100000000 - 00001100(6)
= 11110100(-6)
一道面试题,求大家解释一下
如下函数,在32bit系统foo(2^31-3)的值是:
Int foo(int x)
{
Return x&-x;
}
A: 0 B: 1 C:2 D:4
答案:C 2^31-3=2^(31-3)=2^28=30, 30&(-30)=2,30的二进制表示中1的最低位权值;
不知上面这个解法是什么原理。 另外自己理解 32bit中 2^31 应该是 -2^31 (32bit中 最大的负数), 那么-2^31-3 这个数在 计算机中将怎么表示呢?
求具体过程,谢谢
------解决方案--------------------
你不懂x&-x是干什么的话,那也直接把x=30带进去算就是了啊。
顺便^是xor。
------解决方案--------------------
运算符优先级
------解决方案--------------------
赞同楼上回答
------解决方案--------------------
x & (-x)的值为x最低位的值,比如x=6,那么它的值就为1100 => 100
其实-x = 2的32次方-x,做个减法就明了,比如8位计算机系统中,x=6
-6 = 100000000 - 00001100(6)
= 11110100(-6)