有以下程序
#include <stdio.h> main(){ int i=0; i=~i; printf("%d\n",i); }
程序运行后的输出结果是?
8
0
1
-1
以~9为例: 1)将待计算的数用2进制表示,位数最少为可以表示出当前数的绝对值的二进制位数加1(多1位符号位)。也就是将9表示为01001,其中最左面的0是符号位,0为正,1为负。 2)按位取反(对于符号位同样取反)10110,符号位为1,则为负数,那该负数时多少呢?计算方法:除了符号位,0110取反加1,变为1010,即为10,最后就是-10.
补码的表示方法: 正数的补码就是本身; 负数的补码就是在原码的基础上,符号位不变(最高位表示符号位,0表示正,1表示负),其余各位取反,最后加1。
i取反后,四字节32位全是1,因为计算机是以补码表示,所以这个是补码,我们要转为源码。 方法是符号位不变,减一取反。 所以就是-1
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题