Java中的数是用补码表示的检验

一、基本介绍(关于下列五个定义来自http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html#!comments,谢原博主分享)

      什么是机器数:一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。

      什么是真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

      什么是原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。[+1] = 0000 0001;[-1] = 1000 0001。

      什么是反码:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。[+1] = [00000001] = [00000001]反;[-1] = [10000001] = [11111110]反。

      什么是补码:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。(即在反码的基础上+1)

二、检验

有如下代码:

1 package demo;
2 public class Bit {
3     public static void main(String[] args) {
4     int a=-11;
5     System.out.println(a>>1);
6 
7     }
8 
9 }

运行结果截图如下:

      在这个程序中,我们用右移位运算来检验我们的Java中的数字表示方式。

A:若用原码表示。-11的机器数表示为[10001011]原,右移后表示为[11000101],十进制为-69,与正解-6不一样。所以不是用原码表示。

B:若用反码表示。-11的机器数表示为[11110100]反,右移后表示为[11111010]反,转换成原码为[10000101]原,十进制为-5,与正解-6不一样。所以不是用反码表示。

C:若用补码表示。-11的机器数表示为[11110101]补,右移后表示为[11111010]补,转换成补码为[111111001]反,再转换成原码为[100000110],十进制为-6,与正解-6一致。所以Java中的数是用原码表示的。

      综上,Java中的数是用补码表示的。

 

 

posted @ 2016-10-05 22:46  暮光之城管  阅读(744)  评论(0编辑  收藏  举报