java中byte类型的127+1= |
您所在的位置:网站首页 › 128变为二进制 › java中byte类型的127+1= |
题目如下: public static void main(String[] args) { Byte a = 127; System.out.println(++a); System.out.println(++a); System.out.println(++a); }输出结果: -128 -127 -126 恩,相信有些人是感觉有点懵逼的。我刚开始也是,后来想到了,首先byte的范围为-128~127。字节长度为8位,最左边的是符号位,而127的二进制为:0111 1111,所以执行++a时,0111 111变为1000 0000。大家知道,计算机中存储负数,存的是补码的形式。左边第一位 为符号位。 那么 java中负数的补码转换成十进制如下: 一个数如果为正,则它的原码、反码、补码相同;一个正数的补码,将其转化为十进制,可以直接转换。 已知一个负数的补码,将其转换为十进制数,步骤: 1、先对各位取反; 2、将其转换为十进制数; 3、加上负号,再减去1。 例如: 11111010,最高位为1,是负数,先对各位取反得00000101,转换为十进制数得5,加上负号得-5,再减1得-6。 来一张有说服力的图: 由图可知,127的补码,原码,反码 都为 0111 1111,那么加上1 变成 1000 0000,此时将1000 0000(左边第一位是1,负数,取补码)转换成二进制是多少呢? 可以根据图查看,也可以根据上面的方法自己算。 1.先对各位取反,为 0111 1111 2.转成二进制 127. 3.加上负号 -127 再减去1 为 -128.所以第一次输出结果是 -128 再往下看 第二个输出是-127,怎么来的呢? 第一次加完 计算机得到 1000 0000,再加1,变成 1000 0001,转成二进制 1.先对各位取反,为 0111 1110 2.转成二进制 126 3.加上负号 -126 再减去1 为 -127. 第三次输出类似. 亲测,谢谢。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |