计算机中数值如何转换,机器数的表示。
如果是负数,扩展到高位时需要在前面补1,如果是正数,则扩展0。不是很明白
补码:反码+1。{1_1111111}编码就不再表示-0,而变成了-1。顺着推,最小的编码{1_0000000}就是-128
正数的补码保持原码不变:3={0_0000011}
负数先求反码,然后再加1:-5=[1_1111010]+1={1_1111011}
3+{-5}={-2}的计算过程为:
{0_0000011}+{1_1111011}={1111 1110}(补码)
-->先减1再取反得原码,符号位不变:1111 1101-->1000 0010 = -2
两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。(和模运算有关吗)
在某个数值范围内的加法运算可在MOD值的介入下转换为减法运算,当然也可由减法运算转换为加法运算。这因此也正好引出来计算机的补码。
假如在8位计算机中,模值为 2^8 (代表2的8次幂)
(1)若 X = + 101001 为正数,补0到8位后则表示 00101001 请计算X的补码。而我们知道,在计算机中,正数的补码为原码,故 【X】补 =2^8 +00101001
转换为二进制计算则为 100000000+00101001 = 1 0 0101001 ,最高为1 溢出,则最终的结果值为 0 0101001 ,其中高位0为符号位。
(2)若 X = - 101001 则【X】补 =2^8 -00101001 = 1 00000000 - 00101001 根据二进制减法计算得出结果为 0 11010111 这样高位0溢出得到的结果即为 11010111,此时最高为为符号位。我们都知道计算一个负数的补码,首先是符号位不变,其他位取反,然后再加1。下面我们按照正常计算补码的步骤进行计算:
X = - 101001 由于为负数,所以符号为 为1 则X为 10101001 取反后 为 1 1010110 ,再进行加1 为11010111 由结果可以得出以下结论:
在n位计算机系统中【X】补 =2^n+X = 模 + X 。
采用反码进行计算,最高位产生进位,结果+1
3 + (-2)
= 0000 0011(原) + 1000 0010(原)
= 0000 0011(反) + 1111 1101(反)
= 1 0000 0000(反) -- 最高位产生进位,结果+1
= 0000 0001(反) = 0000 0001(原)
= 1
递归和循环的比较
addl 0(%edx这里的0是什么含义)?