知识扩展
1.数字数据以二进制的形式存储在计算机中,
现实社会中我们使用正号和负号来表示,但是对于计算机来说,要添加正号和负号不是那么容易的事情,会带来电路复杂度和计算性能复杂度成几何倍的上升。于是,定义了符号位的出现了,采用最高位来表示符号位,0为正数,1为负数。好多文章都说是为了解决减法问题才引入的符号位。我觉得符号位目的是解决计算机如何表示负数而出现的(**或者说如何进行 减 运算)。**
2.Java中的数据类型所占的内存空间
数据类型 | 字节 |
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
char | 2 |
注:一字节=8bit(位,计算机中最小数据量单位)
解释:
因在Java中整数如果不特别说明默认为int类型,所以(byte)128被认为是强制类型转换
在转换前在计算机中以二进制的形式表示为
0000 0000 0000 0000 0000 0000 1000 0000 (int 128)
当进行强制类型转换时(大转小)会损失精度 int转byte 4字节转1字节
此时计算机切割前三个字节24bit后表示为 即
10000000 原码(1为符号位表示 - )
11111111 反码
(1)0000 0000 补码 注:负数的补码 是反码的符号位不变 剩下各位取反并末尾位+1 ,因每二进一 所以有九位(溢出)
在原码里面0000 0000和1 0000 0000都是表示0,这样比较浪费,在补码里面,就把10000 0000当作 -2^7 ,以扩大补码表示范围
所以 byte c= (byte)128 输出为 - 128