首页 > 试题广场 >

如下函数,在32位系统中func((131)-3)输出的

[填空题]
如下函数,在32位系统中func((1<<31)-3)输出的值是1
int func(int x)
{
return x & -x;
}

1<<31:10000000……000(31个0)
1<<31-3(x):0111111……101(中间29个1)
-x:
1.符号为变为1:11111111111……101(前面30个1)
2.除符号位,其余取反:100000000……010(中间29个0)
3.+1:100000000……011(中间29个0)
x & -x:00000000……01=1
发表于 2019-02-24 20:26:54 回复(0)
(i) 1 << 31
        10000000000000000000000000000000
(ii) -3 -> +(-3)
        10000000000000000000000000000011       -3的原码
        11111111111111111111111111111100              -3的反码(符号位不变,各位按位取反)
        11111111111111111111111111111101              -3的补码(末尾加一)
(iii) 1 << 31 + (-3)
        01111111111111111111111111111101              补码相加得到变量x的补码
(iv) -x
        10000000000000000000000000000011       取负:各位取反,末尾+1(-x = ~x + 1)
(v) x & -x
        00000000000000000000000000000001       结果为1
编辑于 2019-06-04 14:50:51 回复(0)
在不越界时,只要是奇数,也就是二进制下最左端为1的情况下,x&-x的值始终是1
发表于 2019-06-04 14:38:37 回复(2)
该题求的是x能够整除的最大的2的幂级数。
1<<31-3的尾数为1101,说明该数只能整除的最大的2的幂级数为2的0次方,为1。
编辑于 2019-03-18 22:36:39 回复(0)
请问第三步骤,为什么要+1?3.+1:100000000……011(中间29个0)

发表于 2019-03-03 16:59:09 回复(2)