有符号补码的加减法以及大小比较
1.瞎扯简述
最近在写用fpga进行解缠绕的IP,解缠绕做的事情并不算复杂,就是比较后进行加减而已。但是解缠绕前面这个IP是用的xilinx的Cordic内核,算出来的是补码,过去只做了一些什么简单的取反加一的简单原码补码转换,所以在这里加减就懵了,没有真正碰过补码运算,正好借此机会好好整明白补码的操作。
2.原码与补码的转换
什么是有符号原码,补码怎么转换的,百度即可,耐心看5分钟就整明白了。
3.表示范围
对于8位有符号数的来讲,原码很容易理解,表示范围是-127-127。但是计算机不采用原码存储,采用补码,+0和-0的补码都是0000 0000,当时最令我疑问的1000 0000为什么表示-128,对1000 0000的符号位不变,数值位取反加一,就变成了1 0000 0000,就算我人为规定了1 0000 0000这个就是-128的补码,但是计算机怎么识别呢,毕竟这是个9位数据。
其实,还是自己低估了补码的意义。
我们就来看看把1000 0000作为-128的补码能不能参与运算,为了方便大家验证,我们下面不以
8位有符号数来验证,以4位有符号数验证。4位有符号数是从-8-7,1000就是-8的补码。
举个例子,-8+6=1000+0110=1110 1110的原码是1010=-2 正确 ,1000作为-8的补码参与运算是完全正确的