目录
计算机进制基础
计算机汇编语言中,计算进制分为四种:二进制,八进制,十进制和十六进制
二进制 B (binary)
逢二进一,基数为2,数值部分用两个不同的数字0、1来表示。
示例:7 = 0b0111,0b表示二进制
八进制 O (octal)
逢八进一,基数为8,数值部分分别用0,1,2,3,4,5,6,7来表示。
示例:10=012,第一位补0表示八进制
十进制 D (decimal)
逢十进一,基数为10,数值部分分别用0,1,2,3,4,5,6,7,8,9来表示。
示例:11=11,我们数学运算中最常用的进制
十六进制 H (hexadecimal)
逢十六进一,基数为16,数值部分用十进制表示0~9,用A,B,C,D,E,F表示10~15。
示例:30=0X1E,0X前缀表示十六进制
小技巧
Windows系统打开计算器(win+r输入calc),选择程序员
输入一个数字得出不同进制的计算结果
位运算符
Java位运算符分为两类:位逻辑运算和移位运算
位逻辑运算符(4个):
- 按位与(&)
- 按位或(|)
- 按位取反(~)
- 按位异或(^)
移位运算符(3个):
- 左移(<<)
- 右移(>>)
- 无符号右移(>>>)
运算符 | 描述 |
& | 两位都为1,结果为1,否则为0 |
| | 两位都为0,结果为0,否则为1 |
~ | 两位一个为0,一个为1,结果为1,否则为0 |
^ | 数字反转,0变成1,1变成0 |
<< | 低位溢出,符号位不变,并用符号位补溢出的高位 |
>> | 符号位不变,低位补0 |
>>> | 低位溢出,高位补0 |
原码,补码和反码
机器数:一个数在计算机的存储形式是二进制数,我们称这些二进制数为机器数,机器数是有符号,在计算机中用机器数的最高位存放符号位,0表示正数,1表示负数。
原码
原码表示的数值与机器数一样,即原码就是计算机的二进制数
+1 = 0000 0001 最高位的0表示正数
-1 = 1000 0001 最高位的1表示负数
反码
反码的表示方式分为以下两种:
- 正数的补码=原码
- 负数的补码=最高位符号位不变,其他位取反
+1的反码 = +1的原码 = 0000 0001
-1的反码 = 1111 1110
补码
补码的表示方式分为以下两种:
- 正数的补码=原码
- 负数的补码=负数的反码+1
+1的补码 = +1的原码 = 0000 0001
-1的补码 = -1的反码 + 1 = 1111 1110 + 1 = 1111 1111
总结以下:
- 二进制的最高位是符号位,0表示正数,1表示负数
- 正数的原码=反码=补码
- 负数的反码=原码符号位不变,其他位取反
- 负数的补码=负数的反码+1,反之,负数的反码=负数的补码-1
- 0的反码和补码都是0
- 计算机内存中做运算时都是通过补码进行运算的,得出的结果再转成原码才是我们前台输出的结果
关于上面的几点,我们通过位逻辑运算符做一些简单例子演示
求出2 & 3的结果
- 求出2的原码:原码 = 0000 0010
- 上述规则2可得出,2的补码 = 2的原码 = 0000 0010
- 求出3的原码:原码 = 0000 0011
- 上述规则2可得出,3的补码 = 3的原码 = 0000 0011
- 根据规则6,计算机中做运算都是通过补码来进行运算的,即:
- 2 & 3 = 2的补码 & 3的补码 =0000 0010 & 0000 0011 = 0000 0010
- 0000 0010是我们计算后的补码结果,根据规则1和2得出原码也是相同的,再将我们的原码转成十进制得出的结果为2
求出~-2的结果
- 求出-2的原码:原码 = 1000 0010
- 根据规则3计算出反码,-2的反码 = 1111 1101
- 根据规则4计算出补码,-2的补码= -2的反码+1 = 1111 1101 + 0000 0001 = 1111 1110
- 根据规则6对计算出的补码进行运算,~1111 1110 = 0000 0001
- 0000 0001是我们计算后的补码结果,根据规则1和2得出原码也是相同的,再将我们的原码转成十进制得出的结果为1
最后给个练习题:计算~2的结果?