补码转换成十进制数"/>
怎么把补码转换成十进制数
今天无意间看到有人问这个问题,顺便就引申开来为大家讲讲怎么把补码转换成十进制数,诸位看官请看:
class Test... {
public static void main(String[] args)
...{
int i = 0x7FFFFFF1;
System.out.println(i);
}
}
j的输出是多少呢?答案是14,下面为大家解答一下为什么。
当你在为变量赋值的时候如果用十六进制,那么其实你指定的是补码,因为我们都知道计算机中表示数是用补码形式表示的,在本题中也就是说变量i在内存中的表示形式是FFFFFFF1,那么j等于对i取反这一句,使得j在内存中的表示形式为0000000E,这时要输出j,其实是问“计算机里0000000E这样的一个数在十进制是多少呢?”,换句话说也就是要把反码是0000000E的这样的一个数换算成十进制,好,跟我来做,首先看最高位,0表示这个数是正数,我们知道正数的补码、原码、反码是一样的,所以就把这个数直接换算成十进制就可以了,也就是E×1=14×1=14,这道题目完成了。
我们再想一想,如果System.out.println(i)输出的是多少呢?类似上面讨论的,这条语句等价于问“内存中FFFFFFF1这样形式的一个数在十进制中是多少呢?”再来跟我做一下,首先看最高位,最高位是1,表示这是个负数,已知负数的补码求十进制和正数是有点不同的,第一步,所有位数取反,所以这一步后FFFFFFF1已经变成0000000E,第二步,转换成十进制,E×1=14×1=14,第三步,取倒数再减1,所以(14)倒=-14,-14-1=-15,结果就是这个数-15,大家看到这里应该明白负数补码怎么换算成十进制了吧,这里再给两个例子大家自己做做看,输出分别是什么呢?
e1.
... {
public static void main(String[] args)
...{
int i = 0x8FFFFFF1;
System.out.println(i);
}
}
e2.
... {
public static void main(String[] args)
...{
int i = 0xFFFFFFF1;
int j = ~i;
System.out.println(j);
}
}
更多推荐
怎么把补码转换成十进制数
发布评论