基本概念
- 在计算机内部数据的存储和运算都采用二进制
- 计算机中数据分为有符号数和无符号数,对于有符号数,计算机规定用最高位来表示符号。“0”表示正数,“1”表示负数
- java没有无符号类型,都是有符号类型的数据类型
- 计算机中带符号的整数都是采用二进制的补码进行存储
结论
: Java 中用补码表示二进制数,补码的最高位代表符号位, 最高位是 1 则表示为正数,最高位是 0 则表示为负数
- 原码: 计算机中将一个数字转换为二进制,并在其最高位加上符号的一种表示方法
- 反码: 根据表示规定,正数的反码就是其本身,而负数的反码是符号位不变,其余各位取反
- 补码: 根据表示规定,正数的补码就是其本身,而负数的补码是其反码+1
byte 占1个字节, 8位比特位
最高位为符号位, 0: 正数 1: 负数
正数: 最大值(01111111) 最小值(00000000)+0
负数: 最大值(11111111) 最小值(10000000)-0
01111111 = 127
10000000 是最小负数的补码表示形式, 10000000 减 1 得其反码为 01111111, 再取反得原码为: 10000000 = -128
byte的取值范围是多少,怎么计算出来的
byte 的取值范围是 -128 -> 127 之间,一共是 256 位。一个 byte 类型在计算机中占据一个字节,那么就是 8 bit,所以最大就是 2^7 = 1111 1111。
Java 中用补码来表示二进制数,补码的最高位是符号位,最高位用 0 表示正数,最高位 1 表示负数,正数的补码就是其本身,由于最高位是符号位,所以正数表示的就是 0111 1111 ,也就是 127。最大负数就是 1111 1111,这其中会涉及到两个 0 ,一个 +0 ,一个 -0 ,+0 归为正数,也就是 0 ,-0 归为负数,也就是 -128,所以 byte 的范围就是 -128 - 127。