作业帮 > 数学 > 作业

设有说明:int u=0,v=l,z=2; 则下列表达式中结果为-l的有( ab ) A.v=~u B.u=u|~(v&

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/14 12:56:13
设有说明:int u=0,v=l,z=2; 则下列表达式中结果为-l的有( ab ) A.v=~u B.u=u|~(v&z) C.v=(u|z
为什么AB是-1啊?
u=0;
~u=ffffffff,就是-1 了
v&z=2&1==0;
~(v&z)==~0==ffffffff,任何数与ffffffff按位求或结果都是ffffffff,就是-1了
再问: 这种题不是按照2进制来的么?
再答: 就是2进制啊 因为写成2进制数字太长了,所以一般把2进制数字转换成16进制写(每4位2进制正好对应一位 16进制数字
再问: 反码是全部取反?包括符号位?那2的反码呢??取反并不是他的反码是吧?八个F就是-1???好像不是?
再答: 反码就是全部取反,包括符号位 2 的反码就是 11111111111111111111111111111101也就是 fffffffd,对于32 位整数 8个f 是-1是常识了 ,它是这么来的:把1 按位取反后再+1 这样实验一下就知道了: int a=-1; printf("%x",a); //以16进制输出a,32位会输出8个f,16位的会输出4个f
再问: 我用计算器转换,0取反不是1111111111111111么?可是这个二进制数转成十进制是65535怎么?真麻烦您了,我对这个很是混淆
再答: 对于32位或者16位无符号数来说1111111111111111就是65535,你统一以4字节方式转换就是-1了, 还有xp的计算器2进制转10进制是无符号的,你可以这样实验:10进制下输入-1,转换成2进制,会显式11111111111111111111111111111111,然后转换成10进制,会变成4294967295,这就是无符号的32位整数的最大值