百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

【新书推荐】2.5节 有符号整数和无符号整数

liuian 2025-03-12 16:47 35 浏览

本节内容:整数的编码规则。

数据的编码规则:计算机的二进制数对于计算机本身而言仅仅表示0和1。人们按照不同的编码规则赋予二进制数不同的含义。整数的编码规则分为有符号整数和无符号整数。

数据的存储规则:x86计算机以字节为单位,按照高高低低的原则存储数据,即高地址存储数据的高位值,低地址存储数据的低位值,称之为小端存储规则。反之则称为大端存储规则。

无符号数的编码规则:无符号整数全部是正数,所有数据位都表示数值,没有符号位。

有符号数的编码规则:最高位为符号位,“0”表示正数,“1”表示负数。

2.5.1 数据的编码规则

在前面的章节中,我们知道了在电子计算机内存储的都是二进制数0和1。计算机只是一台机器,并不能识别各种不同类型编码格式的数据。数据的编码格式是我们人为定义的。

举例

下面的数据表示什么意思?

文本文件中这个数据可能表示逗号,exe程序中也可能是一条指令,也有可能是一个数字55H。不同的文件有不同的编码规则,对应不同的含义。比如视频、图片、文本等等。

2.5.2 数据的存储规则

有了指定的数据编码规则之后,我们还需要考虑以什么样的方式将数据存储到计算机的内存中。在x86计算机中,数据是以小端方式存储的,低地址存储数据的低字节,高地址存储数据的高字节,即高高低低的存储方式。而在网络传输中,数据则以大端方式存储的,与小端存储方式相反,低地址存储数据的高字节,高地址存储数据的低字节。下面我们来做实验,验证x86计算机中的小端存储方式。

动手实验5:x86计算机中的小端存储方式

mov eax,0x12345678这条指令的含义是将一个32位的16进制数存入eax寄存器。我们做一个实验,将这条指令写入DTdebug调试器,在调试器中观察如何存储0x12345678。

第一步:打开DTdebug调试器,将IPMSG200.exe拖入调试器中。

第二步:左上角反汇编窗口双击第一条汇编指令,弹出的对话框中填写mov eax,0x12345678指令,点击汇编选项或者直接回车。如图2-14所示,左侧硬编码中的数据为78-56-34-12,与我们正常书写的顺序相反。

图2-14 反汇编窗口观察小端存储模式

第三步:接下来,鼠标点入左下角内存窗口,键盘输入CTRL+G,弹出对话框窗口中输入该条指令的起始地址775a1c37,如图2-15所示:

图2-15 跳转到内存地址

第四步:观察内存窗口,如图2-16所示:在低地址775a1c37处存储低字节数据78,以此类推,地址775a1c38处存储56,地址775a1c39处存储34,高地址775a1c3a处存储高字节数据12,与图2-14所示的硬编码中的小端存储方式相同。

图2-16 内存窗口观察小端存储模式

2.5.3 无符号数的编码规则

无符号整数编码规则:无符号整数全部都是正数,是什么就存什么,没有符号位。

举例

无符号整数9AH,数据宽度为32位。

十六进制数表示:0x0000009AH。

二进制数表示:0000 0000 0000 0000 0000 0000 1001 1010B。

注意:当我们表述或定义一个整数时,一定要表明数据的宽度。

2.5.4 有符号数的编码规则

有符号整数编码规则:最高位为符号位,“0”表示正数,“1”表示负数。

举例

有符号整数1AH,数据宽度为32位

正数:符号位为0。

十六进制数表示:0x0000001A。

二进制数表示:00000000 00000000 00000000 0001 1010。

负数:符号位为1。

十六进制数表示:0x8000001A。

二进制数表示:10000000 00000000 00000000 0001 1010。

图2-17 无符号整数和有符号整数

如图2-17所示,无符号整数常见的三种数据类型为字、双字和四字。所有数据位均表示整数数值,并且都是正整数。有符号整数常见的三种数据类型为字、双字和四字。最高位表示符号位,最高位为0,表示有符号正整数,最高位为1,表示有符号负整数,其余各位表示整数值。

以圆的形式表现数据的存储范围

字节(Byte) :0~0xF 4位

图2-18 4位整数的存储范围

如图2-18所示,4位无符号整数的数据范围:0 1 2 3 4 ......F (10进制0 ~15)。

4位有符号整数的数据范围:(-8 ~ 7)。

正数:0,1,2,3,4,5,6,7 (10进制0 ~7)。

负数:F,E,D,C,B,A,9,8 。

F= -1( 10进制-1~ - 8 )。

字节(Byte) :0~0xFF 8位

图2-19 8位整数的存储范围

如图2-19所示,8位无符号整数数据范围:0 1 2 3 4 ......FF(10进制0~255)。

8位有符号整数数据范围:(-128~127)。

正数:0......3F,40......7F (10进制0 ~127)。

负数:FF......C0,BF......8 0。

FF= -1( 10进制-1~ - 128 )。

字(Word) :0~0xFFFF 16位

图2-20 16位整数的存储范围

如图2-20所示,16位无符号整数数据范围:0 1 2 3 ......FFFF(10进制0~216-1)。

16位有符号整数数据范围:(-215~215 -1)。

正数:0....3FFF,4000...7FFF (10进制0 ~215 -1)。

负数:FFFF......C000,BFFF......8000

FFFF= -1( 10进制-1~ - 215 )

双字(Dword) :0~0xFFFFFFFF 32位

图2-21 32位整数的存储范围

如图2-21所示,32位无符号整数数据范围:0 1 2 3 …FFFFFFFF(10进制0~232-1)。

32位有符号整数数据范围:(-231~231 -1)。

正数:0...3FFFFFFF,40000000...7FFFFFFF(10进制0 ~231 -1)。

负数:FFFFFFFF...C0000000,BFFFFFFF...80000000。

FFFFFFFF= -1( 10进制-1~ - 231 )。

2.5.5 无符号和有符号整数数据类型的定义

在8086 16位汇编语言中,程序员根据无符号整数和有符号整数的指令来确定指令操作数为有符号整数还是无符号整数。无符号指令有JB、JA、SHR等,有符号指令有JL、JG、SAR等。80386以上32位或64位汇编语言,C\C++等高级语言中,程序员在数据定义时明确整数的编码格式为有符号整数还是无符号整数。如32位汇编语言无符号整数数据类型Byte、Word、Dword等,有符号整数数据类型SByte、SWord、SDword等。

举例

16位汇编语句

var1 db 1 ;数据类型db,并未说明变量var1是有符号数还是无符号数

cmp al,var1 ;比较无符号整数大小

JB next1 ;JB无符号数指令,当无符号数al小于无符号数var1时,跳转到next1地址

Next1:

var1 db 1 ;数据类型定义db,并未说明变量var1是有符号数还是无符号数

Cmp al, var1 ;比较有符号整数大小

JL next2 ;JL有符号数指令,当有符号数al小于有符号数var1时,跳转到next2地址

Next2:

32位汇编语句

var2 byte 1 ;数据类型byte,说明变量var2是无符号数

cmp al,var2 ;比较无符号整数大小

JB next1 ;只能使用无符号数指令JB

Next1:

var2 sbyte 1 ;数据类型sbyte,说明变量var2是有符号数

cmp al,var2 ;比较无符号整数大小

JL next1 ;只能使用有符号数指令JL

Next1:

C语言

usigned char var3; //无符号整数,数据宽度8位

usigned char var4;

signed char var5; //有符号整数,数据宽度8位

signed char var6;

If (var3 < var4) //比较无符号整数var3,var4大小

If(var5 > var6) //比较有符号整数var5,var6大小

else

注意

汇编语言中并不会严格检查有符号或无符号数据类型,只要数据类型的宽度一致,编译器并不会报错。即上述示例中无论使用JB指令还是JL指令,数据宽度都是8位。编译都可以通过,具体定义为哪种数据类型,由写这条语句的程序员来决定。

但是在C/C++等高级语言中,编译器会严格检查数据类型,如果数据类型错误,通常编译无法通过。

我们将在后续的课程中学习汇编16位汇编语言、32位汇编语言和C语言的语法规则。

总结

1.无符号整数和有符号整数是计算机整数编码规则。

2.无符号数都是正整数,没有符号位,所有数据位均表示整数值。

3.有符号整数最高位为符号位,分为正整数(最高位为0)和负整数(最高位为1)。

4.如果存储的数据超过最大宽度,那么多余的数据将被丢弃!

5.无符号整数和有符号整数的数据类型表示数据宽度,由程序员定义,与计算机无关。

6.x86 CPU只进行整数的算术逻辑运算。浮点数(数学中的实数)由x87处理器处理。我们将在第四十一章浮点处理器及其指令编码中详细讲述。

本文摘自编程达人系列教材《X86汇编语言程序设计》16位汇编。

相关推荐

ps下载电脑版官方下载(ps电脑版下载地址)

目前在电脑上免费下载PS是不太可能的。主要有以下几个原因。1.AdobePhotoshop(简称PS)是一款商业软件,它需要用户购买和激活许可证才能合法使用。从正规渠道下载并且获得合法授权需要付费...

迅猛兔加速器(迅猛兔加速器官网)

要下载迅猛兔加速器,首先需要在官网或其他可信的下载平台上搜索并找到该软件。一般情况下,官网提供的下载链接是最稳定和安全的选择。在下载之前,确保您的电脑或手机系统能够支持使用此软件,并检查下载链接的文件...

台式电脑怎么重做系统(台式电脑怎么重装系统)

你好,电脑系统重装的步骤如下:1.备份数据:在重装系统之前,需要备份电脑中的重要数据,以免数据丢失。2.准备安装介质:需要准备一个安装介质,可以是光盘、U盘或者硬盘分区镜像等。3.设置启动顺序:将电脑...

微软office2007安装包(office2007安装包怎么安装)
  • 微软office2007安装包(office2007安装包怎么安装)
  • 微软office2007安装包(office2007安装包怎么安装)
  • 微软office2007安装包(office2007安装包怎么安装)
  • 微软office2007安装包(office2007安装包怎么安装)
电脑无法从u盘启动怎么办(电脑无法从u盘启动解决方法)
电脑无法从u盘启动怎么办(电脑无法从u盘启动解决方法)

电脑的进入不了u盘启动的解决方法:一、我们第一步需要确定的是你的u盘在别的电脑上检查一下U盘是否可读,如果可读的话是否成功制作了u盘启动盘了,因为想要启动进入pe的话需要u盘具备启动的功能。  二、如果你检查好自己的u盘已经成功制作了启动盘...

2026-01-13 10:05 liuian

cpu频率越高越好吗(cpu频率越高速度越快吗)

高好。CPU的频率是影响CPU的一个重要因素,直观上来说,频率的高低影响了CPU的性能。频率越高,CPU性能越好;不过需要注意的是,CPU的主频表示在CPU内数字脉冲信号震荡的速度,与CPU实际的运算...

注册表清理软件(注册表清理软件残留软件)

你好!关于注册表清理工具的推荐,以下是几个值得推荐的工具:1.CCleaner:这是一款功能强大的免费清理工具,可以有效地清理注册表、垃圾文件等,使用简单方便。2.WiseRegistryCl...

显卡驱动升级有好处吗(显卡驱动升级有什么坏处)

显卡的新版本驱动能修改一些游戏,图形显示的BUG,所以新版本的显卡驱动能有效的利用显卡的资源,提高游戏性能。不仅可以修正旧版本中的BUG,而且可以进一步挖掘显卡硬件的功能,使得部分硬件功能得以充分发挥...

w7旗舰版系统安装无线网卡(win7系统安装无线网卡)

要在Windows7中安装无线网卡,请按照以下步骤进行操作:1.检查您的计算机是否已安装无线网卡。您可以通过右键单击“我的电脑”并选择“属性”来查看计算机的硬件设置。如果计算机没有内置无线网卡,则...

腾达路由器管理员密码是什么

1、旧版本的腾达路由器,默认的用户名和密码都是:admin。?旧版腾达路由器的初始密码是:admin2、目前腾达新推出的无线路由器,在出厂状态下,是没有初始管理员密码的。?新版腾达路由器没有初始密码新...

电脑开机只有一个鼠标箭头黑屏

解决方法如下:1、同时按“ctrl+shlft+exc”键,调出任务管理器。2、点击任务管理器左下角的“详细信息”。3、然后点击左上角“文件”里的“运行新任务”。4、弹出新窗口,输入“explorer...

把vx好友删了想找回聊天记录

没有啦,联系人列表里没有了,聊天记录就没有了,无法进行恢复,收不到好友消息微信删除好友时会同时删除与该联系人的聊天记录,不过对方还是有双方的微信聊天记录的,删除好友后将无法发送消息给对方,所以伙伴们在...

163邮箱密码正确就是登不上(163邮箱密码一直错误)

邮箱不能登录或登录异常的原因有很多种哦,如您浏览器“隐私”或“安全”级别设置过高,或用户名、密码输入不正确、较长时间未登录被冻结等都会导致不能登录或登录异常。请您先检查一下哦。解决无法登录的方法有:...

移动硬盘维修费用大概是多少钱

芯片不需要多少钱,但数据恢复就另当别论了。。。如果认识人就帮你换个芯片板,要不了多少钱,如果是硬盘盒的芯片板坏了你就乾脆换个盒子,80左右。如果是硬盘芯片坏了,那就不好办了,没人愿意给你换阿。。。但如...

windows资源管理器停止工作是什么原因

1.在进行重装系统之前,可以先检测一下windows资源管理器停止工作的原因是什么。如果是因为电脑的文件太多了,垃圾堆积导致的停止工作,我们就不需要进行重装系统。我们只需要下载一个360卫士或者其他可...