此处所列的文章均是我自己从国外的网站摘抄并翻译的,由于英文水平有限,里面肯定有不少错漏.翻译这些东西没有其他的什么用途,只是提高自己的英语阅读能力和编程技术水平而已     

计算机概念

在计算机内,定点数有3种表示法:原码、反码和补码。
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
反码是在原码的基础上提出来的,补码是在反码的基础上提出来的。它们都是有符号的。
[+7]原= 0 0000111 B   [-7]原= 1 0000111
[+0]原= 0 0000000 B     [-0]原= 1 0000000
反码
[+7]反= 0 0000111 B 反码[-7]反= 1 1111000 B
[+0]反= 0 0000000 B(将其当正数处理) 反码[-0]反= 1 1111111 B
补码
[+7]补= 0 0000111 B [-7]补= 1 1111001 B

[+0]补= 0 0000000 B [-0]补= 0 0000000 B

正数  源码=反码=补码

  1 0000 0000

      - 0000 0111

-------------------

         1111 1001

假设-a = a0*2^0 + a1*2^2+a2*2^3 + ... +  an*2^(n) (a>0)

 

则-a的补数b=(1-a0) * 2^0 + (1-a1)*2^1 + (1-a2)*2^2+... +  (an) * 2^(n)  + 1 (a>0)

那么 -a + b = 1 * 2^0  + ...+ 2*2^(n) + 1 = 1*2^0 + ...+2^n + 1 = 2^(n+2)


假设机器的字长为8

Delphi代码

begin
asm
  mov al, 177
  add al, 100
end

执行完后 al = 0x15 (发生溢出)

应该为256 + 21 = 277的,发生了截取。

 

begin
asm
  mov al, -177  // al = 0x9c
  add al, -100   // al = 0xEB
end

 

 

 

posted @ 2010-06-02 21:24  AppleAndPear  阅读(211)  评论(0编辑  收藏  举报