二进制运算


定点加减

加法

  1. 对于 x=+1001,y=+0101x = +1001, y = +0101 ,求 x+yx + y [x]=01001,[y]=00101[x+y]=01110\\ [x]_补 = 01001, [y]_补=00101 \\ [x+y]_补= 01110 \\ 移除补位的第一个 00 即可等价于 9+5=149 + 5 = 14

  2. 对于 x=+1011,y=0101x = +1011, y = -0101 ,求 x+yx + y [x]=01011,[y]=11011[x+y]=100110\\ [x]_补 = 01011, [y]_补=11011 \\ [x+y]_补= 100110 \\ 移除补位的第一个 00 即可等价于 115=611 - 5 = 6

减法

减法可以被视为加法,即 [xy]=[x+(y)]=[x]+[y][y][y]\\ [x-y]_补 = [x + (-y)]_补 = [x]_补 + [-y]_补 \\ [y] \rightarrow [-y] 的过程为各位取反,末为加一,如加法的例2

  1. 对于 x=+1101,y=+0110x = +1101, y = + 0110,求 xyx - y [x]=01101,[y]=00110,[y]=11010[xy]=[x]+[y]=100111\\ [x]_补 = 01101, [y]_补 = 00110, [-y]_补 = 11010 \\ [x-y]_补 = [x]_补 + [-y]_补 = 100111 \\ 取后四为即可等价于 136=713 - 6 = 7

溢出判断

由于数据的取值范围有限,溢出难以避免,在有限的条件下所能做的也只是判断是否溢出,较大的正数相加会正溢,较小的负数相加会负溢,判断方法是采用变形补码1111 代表正,0000 代表负,运算后为 0101 即为正溢,1010 即为负溢

  1. 对于 x=+1100,y=+1000x = +1100, y = +1000 ,求 x+yx + y [x]=001100,[y]=001000[x+y]=010100\\ [x]_补 = 001100, [y]_补=001000 \\ [x+y]_补= 010100 \\ 补码为 0101 可以判断为正溢
  2. 对于 x=1100,y=1000x = -1100, y = -1000 ,求 x+yx + y [x]=110100,[y]=111000[x+y]=101100\\ [x]_补 = 110100, [y]_补=111000 \\ [x+y]_补= 101100 \\ 补码为 1010 可以判断为负溢。注意这里的 xxyy 都是负数,所以遵循之前的各位取反,末为加一规则

定点乘除

乘法

符号位运算:同号为正,异号为负,数字位运算与十进制无异

  1. 对于 x=15,y=13x = 15, y = -13 [x]=1111,[y]=1101[xy]=11000011\\ [x] = 1111, [y] = 1101 \\ [x*y]= 11000011 \\

取后五位即可等价于 1513=19515 * -13 = -195

除法

除法的运算较为复杂,等待后续补充