加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

8位二进制数的表示范围

(2021-01-17 16:47:47)
分类: 编程技术
本文参考:
https://zhidao.baidu.com/question/143216665.html
https://zhidao.baidu.com/question/647728835676248245.html?qbl=relate_question_0

8位无符号数总共可以表示2的8次幂个数字,即0~255。
8位有符号数的原码,第一位表示符号,后面7位表示数值,则可以表示-127~127。
此时存在两个问题:
(1)0有两种表示方法,分别为00000000和10000000,分别+0和-0,实际上这是没有意义的。
(2)两个数相减,1 + (-1)=0, 00000001 和 10000001的和为10000010即为-2与实际不符。

于时引入补码解决上述两个问题。
正数的补码为原码,负数的补码为 正数的原码取反后加1。
0000 0000——0111 1111表示0-127,1000 0000——1111 1111表示-128到-1,此时0只有一种表示方式。
有符号的表示范围为-128~127

通过两个数相加以及相减通过补码都是正确的,使用补码,可以将符号位和数值域统一处理,即引用了模运算在数理上对符号位的自动处理,利用模的自动丢弃实现了符号位的自然处理,仅仅通过编码的改变就可以在不更改机器物理架构的基础上完成的预期的要求。
假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6 在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。

比如求解 3 + (-2) = 1
3的补码为:00000011
-2的正数原码是:00000010
-2的正数反码是:11111101
-2的补码是:11111110
3+2的操作为:00000011 + 11111110 得到00000001
需要补码的加减操作是符号实际情况的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有