在java中设置大于127的int字节变量

Sam*_*Sam 2 java byte casting

我写下面的示例代码:

public static void main(String[] args) throws Exception
{
      byte number_1 =  127;
      byte number_2 =  (byte) 128;
      System.out.println("number_1 = " + number_1);
      System.out.println("number_2 = " + number_2);
}
Run Code Online (Sandbox Code Playgroud)

我在输出中得到以下结果:

number_1 = 127
number_2 = -128
Run Code Online (Sandbox Code Playgroud)

我知道byte数据类型的范围(-128127).我的样品是否正确?发生了什么?有两个补码操作吗?我不明白这种行为.

Jig*_*shi 12

因为一个字节只能容纳-128到127,所以这是溢出的预期行为

检查此循环

for(int index = 0 ; index < 258 ; index ++ ){
  System.out.println((byte)index);
}
Run Code Online (Sandbox Code Playgroud)

数字线

另见

  • @MJM不清楚你不明白的是什么.想想一个时钟,12(最后)之后的小时是1(第一个)和1之前的小时(第一个)是12(最后一个) (3认同)
  • @MJM一个字节只能保留结果的最低8位.这是导致下溢(从负到正包裹)和溢出(从正到负包裹)的原因,因为顶部位已被丢弃. (2认同)