二进制有关概念和术语总结笔记

embedded/2025/3/20 18:51:40/

        一、数据的基本单位(位、字节、字符、字、字长)

        1、位 (Bit)

        位(Bit)是计算机科学中的一个基本概念,全称为binary digit,即二进制位,是数据信息处理、传输、存储的最小单位。一个二进制信息数据包含多个bit位,每个bit位非0即1。
        比如:在字长为8位的计算机中,2的机器数表示为:0000 0010。

        2、字节 (Byte)

        所谓的字节 Byte,是由八个位组成的一个单元,也就是8个bit组成1个Byte。字节(byte)是计算机存储和数据处理的基本单位之一。字节被广泛用于计算机的数据存储和文件大小度量,文件、硬盘容量等通常以字节(B)、千字节(KB)、兆字节(MB)等为单位。常见的转换关系为:
        1 byte (字节)= 8 bit (位);
        1 B = 1 byte (字节);
        1 KB = 1024 B(字节);
        1 MB = 1024 KB;
        1 GB = 1024 MB;
        1 TB = 1024 GB;

        3、字符 (character)

        字符是数据结构中最小的数据存取单位,包括字母、数字、符号以及汉字、空格等。在计算机科学中,字符也叫字,通常是指能被计算机识别和处理的单个单位。
        字符也是计算机中经常用到的二进制编码形式,通常通过特定的编码规则将字符映射到相应的数值上,以便在计算机中存储和传输。

        字符、字符串和字符编码的区别:
        
‌字符‌:是一个信息单位,可以是中文汉字、英文字母、阿拉伯数字等。在计算机中,一个汉字、一个英文字母或数字都是一个字符。
        ‌字符串‌:是由数字、字母、下划线等组成的一串字符。
        ‌字符编码‌:是将字符集中的字符编码为特定的二进制数,以便在计算机中存储。常见的编码方式有UTF-8、GBK等。

        常见的编码字符与字节的对应关系如下:
        ① ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。
        ② UTF-8编码中,一个英文字符占用1个字节,一个中文(含繁体)字符占用3个字节。
        ③ Unicode编码中,一个英文字符占用2个字节,一个中文(含繁体)字符占用2个字节。
        符号:英文标点占用1个字节,中文标点占两个字节。
        举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。
        ④ GBK编码方式是中文字符占2个字节,英文字符占1个字节。

        4、字(Word)

        字(word)是指计算机处理器(CPU)在一个操作中能够同时处理的最大数据单位,一个字是作为一个整体来处理或运算的一串数码。它是计算机用来一次性处理事务的一个固定长度的位(bit)组。它的大小根据计算机架构的不同而有所不同。
        一个字的长度(即包含的位数)取决于具体的计算机系统或处理器架构。在不同的上下文中,字的长度可能有所不同,常见的有以下几种情况:
        8位字:在某些嵌入式系统或特定应用中,一个字可能被定义为8位(即1个字节)。
        16位字:早期的个人计算机和一些微控制器中,一个字通常是16位。
        32位字:现代计算机系统中,特别是在32位处理器上,一个字通常被定义为32位。
        64位字:在64位处理器和操作系统中,一个字可以是64位,尽管在实际编程中,64位数据通常被称为双字(Doubleword)或更常见的是直接用“64位”来描述。
        需要注意的是,上述定义并不是绝对的,因为不同的系统和编程语言可能有自己的约定。

        5、字长(Word Length)

        字长通常是指计算机处理器(CPU)在一个操作中能够同时处理的最大二进制数据位数。也称为处理器的位宽。它决定了计算机内部数据通路的宽度,从而影响了计算机的运算能力和性能。具体来说,字长越长,处理器能够在一次操作中处理的数据就越多,这通常意味着更高的运算速度和更大的数据处理能力。
        字长是描述处理器性能的参数,根据计算机架构的不同而有所不同。
        8位处理器:一次只能处理8位数据。
        16位处理器:一次能处理16位数据。
        32位处理器:一次能处理32位数据。
        64位处理器:一次能处理64位数据。

        6、字和字长的关系

        在许多情况下,一个字的长度与处理器的字长相匹配。也就是说,如果处理器是32位的,那么在该系统上运行的大多数程序中,一个字通常也是32位的。但这并不是绝对的,因为软件可以设计为使用比处理器字长更长或更短的数据类型。
        字是一个数据存储和处理的基本单位,而字长则是描述处理器性能的参数。字长直接影响计算机的运算速度和数据处理能力,而字的长度更多地影响程序设计和内存管理。

        二、机器数(原码、反码、补码)、真值

        1、机器数

        一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
        比如,十进制中的数 +3 ,在字长为8位的计算机中,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
        机器数有三种表示形式,分别是:原码、反码、补码。

        2、真值

        带符号位的机器数对应的真正数值叫做机器数的真值。
        因为机器数第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,提出了真值的概念。
        真值通常用二进制表示,也可以用其它进制表示。
        例:0000 0101的真值 = +000 0101 = +5,1000 0101的真值 = –000 0101 = –5。

        3、原码

        将依据字长表示的二进制数真值中的正符号用0表示,负数符号用1表示,叫做机器数的原码形式,简称原码。
        例如在字长为8位的计算机中:
        +2的真值为 +000 0010,原码为 0000 0010
        -2的真值为 - 000 0010,原码为 1000 0010

        4、反码

        正数的反码就是其原码,负数的反码则是符号位不变,其他位按位取反(0变1,1变0)。
        例如在字长为8位的计算机中:
        +2的真值为 +000 0010,原码为 0000 0010,反码为 0000 0010
        -2的真值为 - 000 0010,原码为 1000 0010,反码为 1111 1101

        5、补码

        正数的补码就是其原码,负数的补码则是反码+1。
        例如在字长为8位的计算机中:
        +2的真值为 +000 0010,原码为 0000 0010,反码为 0000 0010,补码为 0000 0010。
        -2的真值为 -000 0010,原码为 1000 0010,反码为 1111 1101,补码为 1111 1110。

        备注:
        
计算机所有的存储和计算都是通过补码的形式实现的。
        正数的原码和补码相同。
        负数的原码转换为补码:符号位不变,原码数值位按位取反+1。
        负数的补码转换为原码:符号位不变,补码数值位按位取反+1。
        2的n次幂的二进制形式:第n+1位是1(从右往左数),其余位为0。
        2的n次幂的二进制形式按位取反:第n+1位是0(从右往左数),其余位全部为1。

        三、关于十六进制表示法

        虽然计算机内部使用二进制数字系统来进行计算和存储数据,但在计算机编程和数据表示的实际应用中,人们通常使用十六进制来代替二进制进行书写和表示。这是因为十六进制具有许多优点,使得它比二进制更加方便和实用。
        1、简化数据表示
        十六进制可以将一个字节(即 8 个二进制位)表示为两个十六进制数,这大大简化了数据表示的复杂性。例如,二进制数 11010101 可以用十六进制数 D5 来表示。
        4位二进制可转化为1位十六进制,多位二进制数据可以每四位合并为一位十六进制。
        例如:二进制1111111111111111转换为十六进制为FFFF(或ffff),通常表示为0xFFFF(0x前缀是十六进制标记)。
        2、可读性更高,易于识别和记忆
        相对于二进制,十六进制的数字更加紧凑,使得人们更容易记住和识别。例如,颜色值通常使用六位的十六进制数来表示,而这六位数字表示为二进制则需要 24 个位,很难记忆和书写。

        3、能够更好地与计算机系统进行交互
        许多计算机应用程序和操作系统都使用十六进制表示数据和指令,因此使用十六进制能够更好地与计算机系统进行交互。例如,程序员经常使用十六进制来指定内存地址、颜色值、日期和时间戳等。在操作系统中,十六进制时间戳可以表示日期和时间,而十六进制内存地址可以指定计算机中的特定存储位置。
        4、可以用于处理较大的数据量
        例如,在加密和网络传输中,十六进制可以用于表示大的数字和密钥,这些数字和密钥可能包含数百或数千位。使用十六进制可以使这些数字更易于存储和处理,同时保证数据的安全性和完整性。

        四、Int类型和Long类型数据的进制转换

        Int类型和Long类型数据不涉及小数,进制转换相对简单。

        1、各进制数据字符串的特点
进制Int类型Long类型
正数负数正数负数
字符串
长度
最高位
数据范围
字符串
长度
最高位
数据范围
字符串
长度
最高位
数据范围
字符串
长度
最高位
数据范围
二进制1-3113211-631641
四进制1-161162、31-321322、3
八进制1-111112、31-221222、3
十进制1-101-911负号1-191-920负号
十六进制1-81-788-F1-161-7168-F
        2、B4X中的进制转换函数

        (1) 十进制转二进制
        Bit.ToBinaryString:只能转换Int类型数值,返回二进制字符串。

        (2)十进制转八进制
        Bit.ToOctalString:只能转换Int类型数值,返回八进制字符串。

        (3)十进制转十六进制
        Bit.ToHexString:只能转换Int类型数值,返回十六进制字符串。
        Bit.ToHexStringLong:转换Long类型数值,返回十六进制字符串。

        (4)将其它进制字符串转换为十进制Int类型数值
        Bit.ParseInt(Value as String,Radix as Int) As Int
        Value为Radix进制的合法字符串,如果要转换为负数,字符串前面需加负号。
        Value按规则解析返回的数值必须在Int取值范围内,否则会产生错误。
        Radix的取值范围为:2(包含) - 36(包含)。

        (5)将其它进制字符串转换为十进制Long类型数值
        Bit.ParseLong(Value as String,Radix as Int) As Long
        Value为Radix进制的合法字符串,如果要转换为负数,字符串前面需加负号。
        Value按规则解析返回的数值必须在Long取值范围内,否则会产生错误。
        Radix的取值范围为:2(包含) - 36(包含)。

        3、B4X中的进制标识

        前缀0表示8进制,前缀0x或0X表示16进制。加了标识符后输出的是十进制。
        比如:
        Dim a As Int=0225 '八进制225
        Log(a) '输出:149 (十进制)
        Dim b As Int=0Xfffffd89 '十六进制fffffd89
        Log(b) '输出:-631 (十进制)

        五、Float和Double类型数值的进制转换

        1、进位计数制

        按进位的方法进行计数,称为进位计数制。二进制、八进制、十进制、十六进制均属于进位计数制。进位计数制包含一组数码符号和三个基本因素:

        ① 数码
        数码是一组用来表示某种数制的符号。
        二进制的数码是0、1 ;
        八进制的数码是0、1、2、3、4、5、6、7;
        十进制的数码是0、1、2、3、4、5、6、7、8、9;
        十六进制的数码是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

        ② 基数(R)
        基数是某种数制可以使用的数码个数。
        二进制的基数是2,八进制的基数是8;十进制的基数是10; 十六进制的基数是16。

        ③ 数位(i)
        数位是数码在一个数中所处的位置,以小数点为中心,小数点左边位数,从右向左依次从0开始,小数点右边位数从左向右依次从-1开始。
        例如十进制数543.21的每个数字所在位数分别为:2、1、0、-1、-2。

        ④ 权(Ri):
        权是基数(R)的数位(i)次方,表示数码在不同位置上的数值。
        例如:十进制数值543.21 各位数的权分别为:10²、10¹、10⁰、10⁻¹、10⁻²。
        加权计算各位项的合计值就得到该数的结果值。
        5 × 10² + 4 × 10¹ + 1 × 10⁰ + 2 × 10⁻¹ + 1 × 10⁻² = 543.21。

        2、二进制转八进制

        转换规则:以小数点为中心,整数部分从右向左,小数部分从左向右,"三位一体",不足补0。
        "三位一体"即整数部分和小数部分均按三位一组分组,不足位的整数部分在左边补0,小数部分在右边补0。每3位代表一个值(每3位从右向左位次为0,1,2),由这些值组成八进制数。
        例如:10101010.11110
        分组为:010 101 010 . 111 100 (红色的0为补位的0)
        分组值:  2     5      2  .   7    4
        结果为:252.74

        3、二进制转十进制

        ·转换规则:二进制各位上的系数乘以对应的权,然后求其和。
        例如:二进制111.11转为十进制数,结果为7.75。
        1×2²+1×2¹+1×2⁰+1×2⁻¹+1×2⁻² =7.75

        4、二进制转十六进制

        转换规则:以小数点为中心,整数部分从右向左,小数部分从左向右,"四位一体",不足补0。
        "四位一体"即整数部分和小数部分均按四位一组分组,整数部分不足位在左边补0,小数部分不足位在右边补0。每4位代表一个值(每4位从右向左位次为0,1,2,3),由这些值组成八进制数。
        例如:二进制数111010101.111
        分组为:0001 1101 0101 . 1110  (红色的0为补位的0)
        分组值:   1        D       5  .   E  
        结果为:1D5.E

        5、八进制转二进制

        转换规则与二进制转八进制正好相反,把八进制上的每一位数转为三位的二进制数,再合起来就是二进制数。
        例如:324.56 转为 二进制为 011 010 100 . 101 110,结果为11010100.10111。

        6、八进制转十进制

        转换规则:八进制各位数上的系数*权,再求和。
        例如:123.13 转为十进制就是 83.171875
        1×8²+2×8¹+3×8⁰+1×8⁻¹+3×8⁻²=64+16+3+0.125+0.046875=83.171875

        7、八进制转十六进制

        转换规则1:先把八进制转成十进制,再把十进制转成十六进制。
        转换规则2:先把八进制转成二进制,再把二进制转成十六进制。
       例如:八进制数324.56 ,先转成二进制为 011 010 111.101 110,再按4位一体规则分隔为1101 0111. 1011 1000,换算为16进制,结果就是 D7.B8。

        8、十进制转成 n (n=2,8,16)进制数

        转换规则:整数部分除以 n 取余数,倒着写。
        小数部分乘以 n 取整数,顺着写。小数部分一般保留三位,末位四舍五入。
        例如:十进制数18.55 转十六进制数,结果为:12.8CC

        9、十六进制转二进制

        转换规则:把十六进制每一位数转换为4位二进制,合并得到二进制数。
        例如:十六进制 F65.CD 转为 二进制为 1111 0110 0101.1100 1101

        10、十六进制转八进制

        转换规则:先从十六转十进制,再转为八进制,或者,十六转为二进制,再转为八进制

        11、十六进制转十进制

        转换规则:让十六进制上的各位系数乘以对应的权,然后求和即为十进制数值。
        例如:十六进制的 D8F.C3  转为 十进制 就是 303.75
        13×16²2+8×16¹+15×16⁰+12×16⁻¹+3×16⁻²=3328+128+15+0.75+0.012=3471.762

        六、浮点数的机器码

        浮点数分为单精度浮点数(Float,32位)和双精度浮点数(Double,64位),浮点数在计算机和数字设备上的存储和运算使用特殊的机器码,是根据国际标准IEEE 754定义的二进制码。任意一个二进制浮点数V可以表示成下面的形式:
        V = (-1)s * M * 2E
        (-1)s 表示符号位,当s=0时,V为正数;当s=1时,V为负数。
        M表示有效数字,大于等于1,小于2。
        2E 表示指数位。(其中2也可以换成别的基),E是小数点左移的位数。
        例如:十进制的-7.5,写成二进制是-111.1,相当于-1.111×22 (科学计数法)。此时,s=1,M=1.111,E=2。

        IEEE 754规定,对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

        对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

        IEEE 754对有效数字M和指数E,还有一些特别规定。

        关于M:
       
前面说过,1≤M<2,也就是说,M可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。IEEE 754规定,在计算机 内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只 保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给 M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

        关于指数E:
       
首先,E为一个无符号整数(unsigned int)。这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它 的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,E的真实值必须 由E再减去一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。
        比如,210 的E是10,所以保存成32位浮点数时,必须保存成10(E的真实值)+127=137(E),即10001001。

        指数E还有以下三种情况:
        
(1)E不全为0或不全为1。这时,浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。
        (2)E全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为 0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
        (3)E全为1。这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示 这个数不是一个数(NaN)。


http://www.ppmy.cn/embedded/174216.html

相关文章

【基于深度学习的验证码识别】---- part3数据加载、模型等API介绍(1)

一、MNIST数据集 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;数据集是计算机视觉和机器学习领域最经典的入门级数据集之一&#xff0c;主要用于手写数字识别任务。 使用示例&#xff08;以PyTorch为例&#xff09; from torchvi…

第七章 排序算法法法

算法时间复杂度 衡量一个算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 事后统计法 这种方法可行,但是有两个问题:一是要想对涉及的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件,软件等环境因素,这种方式,要在同一台计算机的…

【设计模式有哪些】

一、创建型模式&#xff08;Creation Patterns&#xff09; 1. 单例模式&#xff08;Singleton&#xff09; 核心思想&#xff1a;保证一个类仅有一个实例&#xff0c;并提供全局访问点。实现方式&#xff1a;public class Singleton {// 1. 私有静态实例&#xff0c;volatil…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492020 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…

用 C 语言理解封装、继承、多态

前言 个人邮箱&#xff1a;zhangyixu02gmail.com本文主要是给一些做嵌入式软件开发&#xff0c;并且非计科的朋友做科普。使用 C 语言理解封装、继承、多态等概念。 正文 基类&#xff1a;最基础的结构体或函数。派生类&#xff1a;基类的继承自己的特性。封装&#xff1a;将…

桥接模式详解

以下是一个结合桥接模式解决实际开发问题的Java实现案例&#xff0c;涵盖多维度扩展、平台兼容性处理、渲染引擎解耦等场景需求&#xff0c;附带逐行中文注释&#xff1a; 场景描述 开发一个跨平台图形渲染框架&#xff0c;需支持&#xff1a; 图形类型扩展&#xff1a;圆形、…

iOS底层原理系列02-深入了解Objective-C

1. Objective-C的本质 用Objective-C编写的代码&#xff0c;底层其实都是C\C代码 所以Objective-C面向对象都是基于 C\C的数据结构(结构体)实现的。 Objective-C并非像其他语言那样在编译期完全确定程序的行为&#xff0c;而是将许多决策推迟到运行时进行&#xff0c;这种特性…

基于FPGA的DDS连续FFT 仿真验证

基于FPGA的 DDS连续FFT 仿真验证 1 摘要 本文聚焦 AMD LogiCORE IP Fast Fourier Transform (FFT) 核心,深入剖析其在 FPGA 设计中的应用。该 FFT 核心基于 Cooley - Tukey 算法,具备丰富特性,如支持多种数据精度、算术类型及灵活的运行时配置。文中详细介绍了其架构选项、…