位层次上的逻辑运算:与、或、非、异或
(这里之简要介绍异或运算)
检查y的输入端,如果输入是1,则输出与另一位不同
如果y=0输出就与x相同
如果y=1输出就与x相反
结果:
00001000
结果:1011 1111
结果:1011 0111
复位: 把一个数变成零
1010 1110 AND 1111 1000=1010 1000
置位: 把一个数变为1
1010 0110 OR 1111 1000=1111 1110
1010 0110 XOR 1111 1000=0101 1110
ps:掩码:maskcode(上式中1111 1000为掩码)
逻辑移位不用于有符号的数
举例
举例
假定操作对象是一个二进制补码格式的有符号整数
用于将整数除以2
用于将整数乘以2
对1001 1001算术右移1位,该模式用二进制补码存储
对1101 1001算术左移1位,该模式用二进制补码存储
对0111 1111算术左移0位,该位模式用二进制补码存储
符号位改变了,发生溢出
使用补码表示整数的加减法运算
整数A和B都是二进制补码了,计算A+B
A=(0001 0001)B 17
B=(0001 0110)B 22
结果:
R=(0010 0111)B 39
高位溢出不用管
A=(0001 1000)B 24
B=(1110 1111)B -17
结果:
R=(0000 0111)B +7
ps:符号位变化
(0+0=1,1-0=0,0-1=1)
以下都是可能
正数+正数才可能(正)溢出
负数+负数可能(负)溢出
正数 - 负数 负数 - 正数会溢出
A=(0001 1000)B 24
B=(1110 1111)B -17
永远对B(被减数)进行补码运算
B(补码)=(0001 0001)B
结果:
R=(0010 1001)B 41
A=(1101 1101)B -35
B=(0001 0100)B 20
B(补码)=(1110 1100)B
结果:
R=(1100 1001)B -55
A=(0111 1111)B 127
B=(0000 0011)B 3
结果:
R=(1000 0010)B -126
预期结果为130但是实际上发生了溢出,因为8位二进制补码表示的范围是-128~+127
当我们在计算机中对数字进行算数运算时,应该记住每个数字和结果都应分配在二进制位的定义范围之内
two’s complement补码
one’s complement反码