《计算机组成与体系结构(原书第4版)》 —2.4.4 无符号数与有符号数
【摘要】 本节书摘来自华章计算机《计算机组成与体系结构(原书第4版)》一书中第2章,第2.4.4节,作者是[美] 琳达·纳尔(Linda Null)朱莉娅·洛博(Julia Lobur)宾夕法尼亚州立大学,张 钢 魏继增 李雪威天津大学 李春阁 何 颖天津大学仁爱学院 译。
2.4.4 无符号数与有符号数
我们讨论了无符号的二进制整数。无符号数用于表示保证不为负数的值。它的一个很好的例子是存储器地址。如果4位二进制值1101是无符号的,那么它表示十进制值13,但是作为一个使用2的补码表示的有符号数,它代表-3。有符号数字用于表示可以为正或负的数。
计算机程序员必须能够管理有符号数和无符号数。为此,程序员必须首先识别有符号数或无符号数的数值。这是通过将值声明为特定类型来实现的。例如,C编程语言有int和unsigned int作为可能的整数变量类型,分别定义有符号和无符号整数。除了不同类型的声明,许多语言对于有符号和无符号数字具有不同的算术运算。一种语言可能有一个用于有符号数的减法指令和一个用于无符号数的减法指令。在大多数汇编语言中,程序员可以选择有符号的比较运算符或无符号的比较运算符。
当我们试图存储对于特定位数来说太大的值时,比较无符号数和有符号数会发生什么是很有趣的。无符号数简单地循环并从零开始。例如,如果使用4位无符号二进制数,把1加到1111上,得到0000。对于这种“返回零”的情况我们是很熟悉的,也许你曾经在一辆跑了很多里程的汽车上见过,它的里程表又回到了零。但是,有符号数分配一半的空间用于正数,另一半用于负数。如果我们将1加到最大正的4位2的补码数0111(+7),得到1000(-8)。符号的意外改变对于没有经验的程序员来说是有问题的,这将导致数小时的调试时间。好的程序员明白这种情况,在发生之前会做出适当计划去处理这个情况。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)