计算机中的二进制:
一些固有的概念不介绍,直接更加形象例子的介绍:
比如:
十进制的1 转换为二进制就是 0 0 0 0 0 0 0 1 2的0次方=1
十进制的-1 转换为二进制就是 1 0 0 0 0 0 0 1
高位:其中红色标记的是高位,1是负数,0为正数(在进行转换的时候这个只代表正负,不作改变)
原码:一个整数按绝对值大小转换成的二进制数称为原码
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码;(取反操作:1变0,0变1)
补码:反码加1称为补码。
以-2为例子:(因为正数的原码补码反码都是一样的,所以不再描述)
-2的原码: 1 0 0 0 0 0 1 0
--2的反码: 1 1 1 1 1 1 0 1
-2的补码: 1 1 1 1 1 1 1 0 反码加上1,2进制遇二进一(计算机是通过补码进行运算的,所以补码非常的重要);
java 其实是按照补码进行运算的
过程为:原码==》反码==》补码==运算=结果==》补码==》反码==》原码
以-3+1=-2为例
-3 1 0 0 0 0 0 1 1 --> 原码
1 1 1 1 1 1 0 0 --> 反码 ==原码取反
1 1 1 1 1 1 0 1 --> 补码 ==反码+1(补码最终是参与运算的,所以这个作为-3的最终的运算结果)
1 0 0 0 0 0 0 0 1 --> 1的补码(前面已经概述了。整数的补码和原码一样)
1 1 1 1 1 1 1 0 --> 结果是补码,按照步骤应该转换为原码,
1 1 1 1 1 1 0 1 --> 反码
1 0 0 0 0 0 1 0 -->原码 转换为为 -2
在执行java中的位运算的时候,无疑就是& | ~ 或者别的
这里作介绍
& :按位与 两位全为1,结果为1
比如在作位运算的时候: -3 & 1
1 1 1 1 1 1 0 1 --> -3 补码
& 0 0 0 0 0 0 0 1 --> 1的补码
----------------------------------------
0 0 0 0 0 0 0 1 --> 结果为 1
上述就是所表示与运算,其实其他的运算都是一样的,
介绍一下 ~ 运算
.~ :按位取反 :所有的0变成1,所有的1变成0 (仅限于一个表达式使用)
这个是只代表一个数的运算
1 1 1 1 1 1 0 1 --> -3 补码
-----------------------------------------
0 0 0 0 0 0 1 0 --> 2
>>: 带符号右移位,符号位(高位)为0,补0,符号位为1,补1 ,溢出位置舍去
0 0 0 0 1 1 0 0 12
-----------------------------------------12>>2
0 0 0 0 0 0 1 1 3
负数>> -12>>2
1 0 0 0 1 1 0 0 -12 原码
------------------------------------------
1 1 1 1 0 0 1 1 反码
------------------------------------------
1 1 1 1 0 1 0 0 补码
------------------------------------------
1 1 1 1 1 1 0 1 移动后的补码
------------------------------------------
1 1 1 1 1 1 0 0 反码=上一步-1
------------------------------------------
1 0 0 0 0 0 1 1 原码=上一步取反 -3
------------------------------------------