java基本数据类型byte的取值范围-128~127,以及溢出后取值的实现

byte取值范围的计算和溢出取值的计算:

  1. 首先看一下byte类型在java.lang包下的源码,源码指定了byte类型的最大值和最小值。
    在这里插入图片描述
    2.在计算机内存存放的数值都是补码形式,第一位为符号位(可以百度补码概念),对应的取值如下:

(1)求负整数的补码,先判定其为负数,然后将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1获取值。
(2)正整数的原码和补码一致。

补码 原码 十进制 备注
0111 1111 0111 1111 127 正数最大值
0000 0001 0000 0001 1 正数最小值
1111 1111 1000 0001 -1 负数最大值
1000 0001 1111 1111 -128 负数最小值
  1. 综上可得byte类型的取值范围为-128~127
  2. 而当发生溢出时,例如:
    在这里插入图片描述
    首先byte b = 127,进行了++b操作之后,变成了128,二进制表示为1000 0000,因为计算机的数值都是补码形式表示,所以1000 0000为补码,因为第一位为1,所以其为负数,进行取反加一得到1000 0000,即数值为128,又因为其为负数,所以值为-128,综上所述:溢出后的128的实际值为-128。下面再举个例子验证一下:
    在这里插入图片描述

127进行累加操作之后,变为129
129的原码和补码为 1000 0001
首位为1,其为负数,将补码取反加一得到0111 1111
数值为127加上符号位,结果为-127

你可能感兴趣的:(JavaSE)