本文共 912 字,大约阅读时间需要 3 分钟。
在复习Java基本类型的时候突然遇到的问题
为什么byte型的数据表示的范围是 -128~127呢?我们都知道byte在Java中占一个字节,一个字节也就是八位,简单来说就是八个二进制(电脑只认识0,1 最终都是转化成二进制来识别的)在Java中最高位是用来表示正负数的,0代表正数,1代表负数。byte型的占八位数,有一位是符号位也就是说用来表示实际数大小的也就是7位,那么为什么不是 11111111 ~ 01111111 也就是(-127 ~ 127)呢? 其实在Java中负数不是这么表示的,并不是-127就是127化成二进制然后在前面加一个1表示负数。Java中表示负数是这样的,比如-127,他的负数的二进制的表示方法是 -127的绝对值 127,取127的二进制 01111111,然后取反得到 10000000,然后再加一得到 10000001,这才是-127的二进制表示方法。那么-128怎么来的呢,其实-128就是 10000000,这就是8位数的最小负数的,可以看出在二进制负数中第一位始终是1,然后面的数越大表示这个数越大,后面的数越小表示这个数越小 比如 11111111 表示的是-1,这就是负数中最大的数了,10000000表示-128,这个数最小,-127就是10000001 ,拿出第一位符号位,后面的数比较大小就可以比较出这两个数的大小 那么-129呢,按照负数二进制的方法,应该是129的二进制,10000001,然后取反01111110,然后加一,01111111,可以看到得到的结果最高位是0,0应该表示正数,当遇到这种情况就说明位数不够用了,它是负数应该主动在前面加1,也就是101111111,这个时候就是9位数了,就超出byte的范围了。128也一样,128二进可以制是 10000000, 看到最高一位是1,应该表示负数,可是128是正数,这个时候就要在前面加0,010000000表示128。