补码的秘密之五--无符号数与有符号数

在计算机教材中,有一套谎言:

 计算机中数字,分成:无符号数和有符号数。

 计算机中的有符号数,即原码、反码和补码。

 三种表示方法均有符号位和数值位,符号位都是用 0 表示 “正”,用 1 表示 “负”。

 原码:最高位为符号位,其余表示数值大小;

 反码:正数的反码和原码一样,负数的反码除最高位符号位外,其他位都取反;

 补码:在反码的基础上加1。

 在计算机系统中,数值一律用补码来表示和存储。

而实际上,在计算机中,只有二进制数字。

这些二进制数,可以代表:十进制数字、英文字符、汉字字符、声音、图像、控制信息、状态信息等等。

随便写一组二进制数,它究竟是什么数字呢?

从这组二进制数,是看不出来什么的。

它到底是什么,完全取决于软件(程序)对它们的处理方法。

比如,一个字节的数据 1100 0100,可能是无符号数 196,也可能是有符号数-60

当你执行如下程序:

  MOV AL,0100 0011B ;  AL = 43H = 67

  ADD  AL,1100 0100B ;  AL = 43 + C4 = 07H

相加之后,AL = 07H,同时还有 CF = 1。

此时的进位 CF = 1,就相当于十进制的 256。

如果在后续处理中,不理会 CF,那么,这次相加,就是:67-60 = 7。

此时的 C4H,就是有符号数。

如果你保留 CF,那么这次就是:67 + 196 = 256 + 7 = 263。

此时的 C4H,就是无符号数。

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

以上,就是说:一个二进制数,它就是一个二进制数。

它可以代表多种信息,并不能说,谁是无符号数,谁是有符号数。

那么,它究竟是无符号数,或是有符号数,或是汉字字符?

其实,它们都是一样的,从数字来看,根本就无法区分。

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

应该说,计算机中,有两种处理程序,能够分别处理无符号数和有符号数。

关键的区别,就是对 CF 的保留或舍弃。

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

另外,在计算机中,原码和反码,都是不存在的。

本文完。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值