当前位置: 首页 > news >正文

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

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

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

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

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

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

2.5.1 数据的编码规则

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

举例

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

0

1

0

1

0

1

0

1

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

2.5.2 数据的存储规则

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

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

         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位。

低位

1

0

0

1

1

0

1

0

.......

0

高位

十六进制数表示:0x0000009AH。

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

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

2.5.4 有符号数的编码规则

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

举例

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

低位

0

0

0

1

1

0

1

0

.......

0

高位

正数:符号位为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汇编语言基础教程》。

相关文章:

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

本节内容&#xff1a;整数的编码规则。 ■数据的编码规则&#xff1a;计算机的二进制数对于计算机本身而言仅仅表示0和1。人们按照不同的编码规则赋予二进制数不同的含义。整数的编码规则分为有符号整数和无符号整数。 ■数据的存储规则&#xff1a;x86计算机以字节为单位&…...

RT-Thread: 串口操作、增加串口、串口函数

说明&#xff1a;本文记录RT-Thread添加串口的步骤和串口的使用。 1.新增串口 官方链接&#xff1a;https://www.rt-thread.org/document/site/rtthread-studio/drivers/uart/v4.0.2/rtthread-studio-uart-v4.0.2/ 新增串口只需要在 board.h 文件中定义相关串口的宏定…...

自然语言处理的新突破:如何推动语音助手和机器翻译的进步

一、语音助手方面的进展 语音助手作为人机交互的重要入口之一,其性能的提升离不开自然语言处理技术的进步。基于深度学习的语音识别和语义理解技术,使得语音助手可以更准确地分析用户意图,提供个性化服务。 语音识别精度的持续提高 语音识别是语音助手的基础。随着深度神经网…...

vue3 + jeecgBoot 获取项目IP地址

封装的useGlobSetting 函数 引入并使用 import { useGlobSetting } from //hooks/setting;const glob useGlobSetting();console.log(glob.uploadUrl) //http://192.168.105.57:7900/bs-axfd...

Java Server-Sent Events通信

Server-Sent Events特点与优势 后端可以向前端发送信息&#xff0c;类似于websocket&#xff0c;但是websocket是双向通信&#xff0c;但是sse为单向通信&#xff0c;服务器只能向客户端发送文本信息&#xff0c;效率比websocket高。 单向通信&#xff1a;SSE只支持服务器到客…...

[蓝桥杯]真题讲解:冶炼金属(暴力+二分)

蓝桥杯真题视频讲解&#xff1a;冶炼金属&#xff08;暴力做法与二分做法&#xff09; 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 //暴力代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << &qu…...

Fastbee开源物联网项目RoadMap

架构优化 代码简化业务&协议解耦关键组件支持横向拓展网络协议支持横向拓展&#xff0c;包括&#xff1a;mqtt broker,tcp,coap,udp,sip等协议插件化编码脚本化业务代码模版化消息总线 功能优化 网关/子网关&#xff1a;上线&#xff0c;绑定&#xff0c;拓扑&#xff0…...

Linux文件管理技术实践

shell shell的种类(了解) shell是用于和Linux内核进行交互的一个程序&#xff0c;他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。 内置shell…...

Python如何按指定列的空值删除行?

目录 1、按指定列的空值删除行2、滑动窗口按指定列的值填充最前面的缺失值 1、按指定列的空值删除行 数据准备&#xff1a; df pd.DataFrame({C1: [1, 2, 3, 4], C2: [A, np.NaN, C, D], C3: [V1, V2, V3, np.NaN]}) print(df.to_string()) C1 C2 C3 0 1 A V1 1 …...

【云原生】Docker的镜像创建

目录 1&#xff0e;基于现有镜像创建 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改 ​编辑&#xff08;2&#xff09;然后将修改后的容器提交为新的镜像&#xff0c;需要使用该容器的 ID 号创建新镜像 实验 2&#xff0e;基于本地模板创建 3&am…...

大语言模型推理提速:TensorRT-LLM 高性能推理实践

作者&#xff1a;顾静 TensorRT-LLM 如何提升 LLM 模型推理效率 大型语言模型&#xff08;Large language models,LLM&#xff09;是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络&#xff0c;这些神经网络由具有 self-attention 的编码器和解码器组…...

全面理解“张量”概念

1. 多重视角看“张量” 张量&#xff08;Tensor&#xff09;是一个多维数组的概念&#xff0c;在不同的学科领域中有不同的应用和解释&#xff1a; 物理学中的张量&#xff1a; 在物理学中&#xff0c;张量是一个几何对象&#xff0c;用来表示在不同坐标系下变换具有特定规律的…...

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了&#xff0c;搭了个 Latex的环境&#xff0c;跟windows上一样好用。 首先&#xff0c;如果是 intel 芯片的 macOS&#xff0c;那么可以使用组合1&#xff0c; 如果是 M1、M2 或 M3 芯片或者 intel 芯片的 Mac book&#xff0c;则应该使用…...

深入Amazon S3:实战指南

Amazon S3(Simple Storage Service)是AWS(Amazon Web Services)提供的一项强大的云存储服务,广泛用于存储和检索各种类型的数据。本篇实战指南将深入介绍如何在实际项目中充分利用Amazon S3的功能,包括存储桶的创建、对象的管理、权限控制、版本控制、日志记录等方面的实…...

Ansible自动化运维(三)Playbook 模式详解

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…...

LCS板子加逆向搜索

LCS 题面翻译 题目描述&#xff1a; 给定一个字符串 s s s 和一个字符串 t t t &#xff0c;输出 s s s 和 t t t 的最长公共子序列。 输入格式&#xff1a; 两行&#xff0c;第一行输入 s s s &#xff0c;第二行输入 t t t 。 输出格式&#xff1a; 输出 s s s…...

不同知识表示方法与知识图谱

目录 前言1 一阶谓词逻辑1.1 简介1.2 优势1.3 局限性 2 产生式规则2.1 简介2.2 优势2.3 局限性 3 框架系统3.1 简介3.2 优势3.3 局限性 4 描述逻辑4.1 简介4.2 优势4.3 局限性 5 语义网络5.1 简介5.2 优势5.3 局限性 结语 前言 知识表示是人工智能领域中至关重要的一环&#x…...

Kotlin程序设计 扩展篇(一)

Kotlin程序设计&#xff08;扩展一&#xff09; **注意&#xff1a;**开启本视频学习前&#xff0c;需要先完成以下内容的学习&#xff1a; 请先完成《Kotlin程序设计》视频教程。请先完成《JavaSE》视频教程。 Kotlin在设计时考虑到了与Java的互操作性&#xff0c;现有的Ja…...

星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布

12月15日&#xff0c;2023 英特尔新品发布会暨 AI 技术创新派对上&#xff0c;星环科技基于第五代英特尔至强可扩展处理器的Transwarp Hippo分布式向量数据库解决方案重磅发布。该方案利用第五代英特尔至强可扩展处理器带来的强大算力&#xff0c;实现了约 2 倍的代际性能提升&…...

一体化运维的发展趋势与未来展望

随着信息技术的迅猛发展&#xff0c;企业的IT系统已经从单一的、孤立的应用转变为多元化、复杂化的系统集群。云计算、大数据、物联网等前沿技术的广泛应用&#xff0c;使得企业的IT运维面临着前所未有的挑战。在这样的背景下&#xff0c;一体化运维作为一种新型的运维模式&…...

科技云报道:金融大模型落地,还需跨越几重山?

科技云报道原创。 时至今日&#xff0c;大模型的狂欢盛宴仍在持续&#xff0c;而金融行业得益于数据密集且有强劲的数字化基础&#xff0c;从一众场景中脱颖而出。 越来越多的公司开始布局金融行业大模型&#xff0c;无论是乐信、奇富科技、度小满、蚂蚁这样的金融科技公司&a…...

C语言入门到精通之练习34:求100之内的素数

题目&#xff1a;求100之内的素数。 程序分析&#xff1a;质数&#xff08;素数&#xff09;酵母素数&#xff0c;有无限个。一个大于1的自然数&#xff0c;除了1和它本身外&#xff0c;不能被其他自然数整除。 代码如下&#xff1a; #include <stdio.h># #include &l…...

Qt采集本地摄像头推流成rtsp/rtmp(可网页播放/支持嵌入式linux)

一、功能特点 支持各种本地视频文件和网络视频文件。支持各种网络视频流&#xff0c;网络摄像头&#xff0c;协议包括rtsp、rtmp、http。支持将本地摄像头设备推流&#xff0c;可指定分辨率和帧率等。支持将本地桌面推流&#xff0c;可指定屏幕区域和帧率等。自动启动流媒体服…...

Oracle按日周月年自动分区

目录 1、分区键 2、初始分区 3、周月年自动分区 4、按日自动分区表建表语句 与普通建表语句相比&#xff0c;分区表多了一些分区信息&#xff1b; 1、分区键 以下面销售明细表为例&#xff0c;以data_dt为分区键&#xff0c;NUMTODSINTERVAL(1, day) 按日分区 PARTITION …...

单元测试、模块测试、web接口测试

单元测试与模块测试 什么是“单元测试”、“模块测试”&#xff1f; 然而在功能的实现代码中并没有“单元”&#xff0c;也没有“模块”&#xff1b;只有函数、类和方法。先来分别看看它们 的定义&#xff1a; 单元测试&#xff08;Unit testing&#xff09;&#xff0c;是指…...

DAY10_SpringBoot—SpringMVC重定向和转发RestFul风格JSON格式SSM框架整合Ajax-JQuery

目录 1 SpringMVC1.1 重定向和转发1.1.1 转发1.1.2 重定向1.1.3 转发练习1.1.4 重定向练习1.1.5 重定向/转发特点1.1.6 重定向/转发意义 1.2 RestFul风格1.2.1 RestFul入门案例1.2.2 简化业务调用 1.3 JSON1.3.1 JSON介绍1.3.2 JSON格式1.3.2.1 Object格式1.3.2.2 Array格式1.3…...

刘润-进化的力量2 一刷 笔记

安全感来自确定性&#xff0c;但机会藏在不确定性中 安全感来自确定性&#xff0c;但机会藏在不确定性中。 每一个弯道里&#xff0c;都有你超车的机会 意外、周期、趋势、规划 可是&#xff0c;为什么趋势一定是不可逆转的呢&#xff1f;因为&#xff0c;效率提高了 长期…...

用Excel辅助做数独

做数独游戏的时候&#xff0c;画在纸上很容易弄花眼&#xff0c;所以我考虑用Excel辅助做一个。 界面如下&#xff1a; 按下初始化表格区域按钮&#xff0c;会在所有单元格中填充“123456789”。如下图&#xff1a; 当某个单元格删除得只剩一个数字时&#xff0c;会将同一行、…...

arcgis实现截图/截屏功能

arcgis实现截图/截屏功能 文章目录 arcgis实现截图/截屏功能前言效果展示相关代码 前言 本篇将使用arcgis实现截图/截屏功能&#xff0c;类似于qq截图 效果展示 相关代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta nam…...

mysql备份

1.新建备份目录 mkdir -p /data/mysql_dump/#查找mysql配置位置 find / -name "my.cnf" find / -name "mysql.sock" find / -name "mysqldump"2.定时任务 #每天凌晨备份一次 echo "00 00 * * * root /data/mysql_bak.sh" >> /…...