java中byte类型的127+1=

您所在的位置:网站首页 128变为二进制 java中byte类型的127+1=

java中byte类型的127+1=

2024-07-13 20:12| 来源: 网络整理| 查看: 265

题目如下:

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