原码:十进制数据的二进制表现形式
8个bit形成一个tybe(字节)
左至右第一个bit为是符号位;
0为正 1为负
后面为数值
利用原码算正数没问题
计算负数时 实际运算的方向,跟正确方向是相反的
反码:是为了解决原码不能计算负数的问题而出现的
正数的原码不变. 负数的反码在原码的基础上,符号位不变.数值取反,1变0 0变1
反码的弊端
负数运算的时候,如果不跨0,是没有任何问题的,但如果跨0了,跟实际结果会有1的偏差
补码
是为了解决负数运算跨0时出问题而出现的
正数原码不变
负数在反码的基础上+1
补码还能多记录一个特殊的值,该数据在1字节下没有原码和反码
计算机中存储和计算都是以补码的形式进行的
隐式转换
前面加0
强制转换
比如int 换short
int a= 300
byte b=(byte)a;
删掉前面3个字节的bit 也就是24个 剩下00101100 这个打印出来是44
特别记住计算机用补码存储和计算
负数算完之后,记得转换为原码 写出10进制
a=200;
a<<2 为左移2次 左移一次相当于10进制的数据 ×2 高位补之前的符号
这个a<<2 打印出来是800; 乘了2 次 2
a>>2 右移2次 符号位补之前的 数值为补0 相当于/2
>>>无符号右移 符号数值都补0;