byte类型的127+1=-128?

 1 public class Test2 {
 2     public void add(Byte b) {
 3         b = b++;
 4     }
 5
 6     public void test() {
 7         Byte a = 127;
 8         Byte b = 127;
 9         add(++a);
10         System.out.println("a = "+a);
11         add(b);
12         System.out.println("b = "+b);
13     }
14
15     public static void main(String[] args) {
16         Test2 test2=new Test2();
17         test2.test();
18     }
19 }

运行结果:

  a = -128
  b = 127

分析:首先byte的范围为-128~127。字节长度为8位,最左边的是符号位,而127的二进制为:0111 1111,所以执行++a时,0111 111变为1000 0000,而128的二进制为:1000 0000,即为127+1=-128;而add(b)其实为add(127),而b=b++其实为b=127,b++;则b=127。

时间: 2024-11-09 00:05:10

byte类型的127+1=-128?的相关文章

Java byte 类型的取值范围是-128~127

为什么Java byte 类型的取值范围是-128-127 : http://blog.163.com/[email protected]/blog/static/47517863200911314245752/ java基本数据类型的取值范围: http://www.cnblogs.com/singlesoar/p/5688915.html

为什么一个byte的存储范围是-128~127?

为什么一个byte的存储范围是-128~127?文本关键字:byte.字节.二进制位.反码.补码文章目录为什么一个byte的存储范围是-128~127? 一.byte 二.反码与补码 **1. 反码 补码三.byte的数据范围一.byte**在计算机中,一个二进制位是最小的存储单元,由于是二进制,所以能存储的数字只能是0和1.显然,如果我们直接去操作每个二进制位将是很麻烦的过程,所以在编程中我们直接使用的是其他的数据类型,如:byte.int.float.这些数据类型能够使我们的数据存储更加方便

[转载]浅析为什么char类型的范围是 —128~+127

http://blog.csdn.net/daiyutage/article/details/8575248 在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1   n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即    -2

浅析为什么 char 类型的范围是 : 128~+127

在 C 语言中, signed char 类型的范围为 -128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是 -128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1 (n为整型的内存占用位数),所以 int 类型32位那么就是 -(2^31) ~ 2^31-1 即 -2147483648~2147483647,但是为什么最小负数绝对值总比最大正数多 1 ,这个问题甚至有的

浅析为什么char类型的范围是 —128~+127

在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1   n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即    -2147483648~2147483647,但是为什么最小负数绝对值总比最大正数多1 ,这个问题甚至有的工作几年

int类型和byte类型的强制类型转换

今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到InputStream的抽象方法read时,说到read返回一个int型,但实际是一个byte型的数据.这点从API也能考证.如图: 那么问题来了,int占4个字节,byte占1个字节,我们循环读取的时候将int型数组强制类型转换成byte时,会发生什么情况呢?代码如下: 1个字节占8位,既然实际返回的是byte

java里int类型转byte类型

今天在做书上的一个例子的时候, 要使用byte类型,首先我很直接的就写到了byte b = 0XAA, 结果报错, 说从int转换到byte可能会有损失. 我当时就很奇怪, 为什么会出现这种情况呢? 0XAA转化为10进制的byte类型就是-86, 并没有超出-128~127的范围.而且如果直接赋值byte b = -86 ; 也是正常通过. 经过网上一位前辈的教导, 现在有了这样的结论: 在计算机中是没有正负数的区分的, 所有的正负数都是人为规定的 byte类型的最小值-128二进制位1000

C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……

事实上写这篇对Byte类型表数范围的文章,真的是蛋疼+蛋疼+蛋疼,每每看到Byte表数范围这一块.都对-128如此的陌生与迷茫.操蛋的Byte,操蛋的人生-- 熊孩子出场:Byte 恶作剧结果:表数范围(-128-------127) 蛋疼原因:上了个不太好的大学,在计算机组成原理课上.老师也在原码.反码.补码中神游-- 决心又一次做人:以前有一个Byte摆在我面前让我去爱上她,但是我没有珍惜,假设上天再给我一篇博客,我决定对她说:"我要为你写一万遍--" 1)难点在于为何表数范围为-

Java 中 byte 类型初始化问题

很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我万万没有想到这么一个简单的操作,在 Java 中有各种约束. 首先看看代码: // 方式 1 byte allBitsOne = 0xFF; // 方式2 byte allBitsOne = (byte)0xFF; // 方式3 byte allBitsOne = 0xFFFFFFFF; 上面的哪个