数据结构与算法篇((原/反/补)码 进制)

news/2024/10/5 20:34:01/

目录

讲解一:原/反/补)码

一、原码

二、反码

三、补码

四、有符号位整型

五、无符号位整型

六、Java中的整型

七、整数在底层存储形式

讲解二:进制

一、简介

二、常用的进制

十进制

二进制

八进制

十六进制

知识补充

三、进制转换

1. 二进制与十进制之间的转换

1.1. 十进制转二进制

1.2. 二进制转十进制

2. 二进制与十六进制之间的转换

2.1. 十六进制转二进制

2.2. 二进制转十六进制

3. 十进制与十六进制之间的转换

3.1. 十六进制转十进制

3.2. 十进制转十六进制

四、知识小结


讲解一:原/反/补)码

一、原码

正数的原码是本身,符号位为0

负数的原码,符号位为1

二、反码

正数反码是它本身

负数反码是保留符号位,其他位取反

三、补码

正数的补码是它本身

负数的补码是它的反码加一

四、有符号位整型

最高位(第0位) ,符号位(标识正负 -> 0(非负数) 1(负数)

其余位(1~31位) ,数值位(取值范围 -> -2^31 ~ 2^31 - 1)

五、无符号位整型

其余位(0~31位),数值位(取值范围 -> 0 ~ 2^32 - 1)

六、Java中的整型

Java中的 int类型(整型)指的是有符号整型

七、整数在底层存储形式

整数在底层是以补码的形式存在

讲解二:进制

一、简介

进位制其实是一种记数的方式,所以也称为进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可

使用数字符号的数目称为基数(英文:radix)或底数,基数为n,即可称n进位制,简称n进制。例如平常生活中我们

经常用到的十进制,就是使用10个阿拉伯数字0-9进行记数,所以它的基数就是10,称为十进制。

在计算机的世界里,计算机语言就是二进制,计算机能直接识别二进制数据,其它数据都不能直接识别。

对于任何一个数,我们可以用不同的进位制来表示,他们是等价的,只是表示形式不同而已。

例如:对于十进制数 2021,分别用不同机制表示如下:

  • 十进制表示为:202 1 10 2021_{10} 202110
  • 二进制表示为::1111110010 1 2 11111100101_{2} 111111001012
  • 八进制表示为:374 5 8 3745_{8} 37458
  • 十六进制表示为:7 e 5 16 7e5_{16} 7e516

右下标数字代表了是几进制,虽然表示形式不同,不过它们所代表的数值都是一样的,均为2021。

二、常用的进制

大家都知道,计算机是由二进制组成的,除了我们最常用的十进制外,计算机中常用的进制有二进制、八进

制和十六进制。

下面我们就分别介绍一下。

十进制

十进制是大家最容易理解的进制,由于有一些天然的因素,比如我们的双手总共有十根手指,所以在人类自发采

用的进位制中,就很自然的使用了十进制作为主流的计数方法,而且大部分人从小接受的教育都是掌握十进制的

计数方法,所以十进制几乎已经深深的烙印在我们的脑海中了。

十进制有10个基本数字,分别为 0、1、2、3、4、5、6、7、8、9,十进制的基数为10,运算规则为”逢十进

一”;

十进制的表示方法有两种,使用下标或者后缀D,例如:202 1 10 2021_{10} 202110

或者在数字后面加上后缀D,如: 2021D

当然由于十进制在日常生活中非常普遍,通常我们可以直接使用数字来表示,默认就是十进制数。

二进制

二进制由于表示简单,运算简单等特点,是计算机技术中广泛采用的一种数制,二进制由两个基本数字组成,分

别为0、1,运算规则为”逢二进一”。

为了区别于其他进制,二进制的表示方法也有两种,使用下标或后缀B,例如:

1111110010 1 2 11111100101_{2} 111111001012

或者在数字后面加上后缀B,如:11111100101B

二进制的特点有:

  1. 二进制数中只有两个数码0和1,可用具有两个不同稳定状态的元器件来表示一位数码。
  2. 二进制数运算简单,大大简化了计算中运算部件的结构。
  3. 二进制天然兼容逻辑运算。

八进制

八进制有8个基本数字,分别为0、1、2、3、4、5、6、7,运算规则为”逢八进一”。

由于二进制数据的基数R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。八进制的

基数n=8=2^3,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。

八进制也有两种表示方法,使用下标或后缀O,例如:374 5 8 3745_{8} 37458

或者在数字后面加上后缀O,如:3745O

另外一个八进制数,可以用3个二进制数来表示。

例如:374 5 8 = 01111110010 1 2 3745_{8} = 011111100101{2} 37458=0111111001012

十六进制

十六进制的引入同样是因为二进制数在实际使用中因为位数太长,不容易记忆才提出了十六进制数。

十六进制有16个基本数字,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,运算规则为”逢十六

进一”。

十六进制有两种表示方法,使用下标或后缀H,例如:7 e 5 16 7e5_{16} 7e516

或者在数字后面加上后缀H,例如:7e5H

一个十六进制数,可以用4位二进制数来表示。

例如:7 e 5 16 = 01111110010 1 2 7e5_{16} = 011111100101{2} 7e516=0111111001012

知识补充

补充小知识-进制的中英文表示:

  • Binary - 二进制
  • Octal - 八进制
  • Hexadecimal - 十六进制
  • Decimal - 十进制

看完之后是不是知道后缀的字母是什么含义了吧

下面这个表格有助于我们理解各个进制之间的关系:

10进制

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

2进制

0

1

10

11

100

101

110

111

1000

1001

1010

1011

1100

1101

1110

1111

10000

8进制

0

1

2

3

4

5

6

7

10

11

12

13

14

15

16

17

20

16进制

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

10

三、进制转换

我们在上面了解了常用的进制,后面在实际工作中我们可能会在不同的场景下用到不同的进制表示,这就涉及到

进制的转换了,那么我们介绍一下常用的进制是如何进行转换的。

1. 二进制与十进制之间的转换

1.1. 十进制转二进制

计算方法:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运

算直到商为0为止。

最后读数时,从最后一位读起。

例如:

十进制数:2021 转二进制后,二进制数为: 11111100101B

计算过程如下:

第N次

十进制数 2021

余数

第1次

2021 / 2

1010

1

第2次

1010 / 2

505

0

第3次

505 / 2

252

1

第4次

252 / 2

126

0

第5次

126 / 2

63

0

第6次

63 / 2

31

1

第7次

31 / 2

15

1

第8次

15 / 2

7

1

第9次

7 / 2

3

1

第10次

3 / 2

1

1

第11次

1 / 2

0

1

计算完成后,从最后一位读起,最后结果为:11111100101B

1.2. 二进制转十进制

计算方法为:把二进制数按权展开,相加既得十进制数。

例如:

二进制数:11111100101B 转十进制后,十进制数为: 2021

计算过程如下:

二进制

1

1

1

1

1

1

0

0

1

0

1

位数

10

9

8

7

6

5

4

3

2

1

0

公式

2^10

2^9

2^8

2^7

2^6

2^5

0 * 2^4

0 * 2^3

2^2

0 * 2^1

2^0

结果

1024

512

256

128

64

32

0

0

4

0

1

最后将每一位计算结果相加,即

2^10 + 2^9 + 2^8 + 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 1024 +

512+256+128+64+32+0+0+4+0+1 =2021

最后计算结果为:2021

2. 二进制与十六进制之间的转换

2.1. 十六进制转二进制

计算方法:

十六进制数通过除2取余法,得到二进制数,对每个十六进制数为4个二进制数,不足时在最左边补领。

例如:

十六进制数:7e5H 转二进制后,二进制数为:011111100101B

计算过程如下:

首先,将十六进制7e5数分成三部分7、e、5,分别做除2取余:

第N次

十进制数 7

余数

第1次

7 / 2

3

1

第2次

3 / 2

1

1

第3次

1 / 2

0

1

7 转换为二进制数得 0111,不足四位,前面补零。

第N次

十进制数 14 (e 的十进制数)

余数

第1次

14 / 2

7

0

第2次

7 / 2

3

1

第3次

3 / 2

1

1

第4次

1 / 2

0

1

e 转换为二进制为:1110

第N次

十进制数 5

余数

第1次

5 / 2

2

1

第2次

2 / 2

1

0

第3次

1 / 2

0

1

5 转换为二进制为:0101,不足四位,前面补零。

最后计算结果为:011111100101B

2.2. 二进制转十六进制

计算方法:4位二进制数按权展开相加得到1位十六进制数。注意,4位二进制数转成十六进制数是从右到左开始转

换,不足时补0。

例如:

二进制数:011111100101B 转十六进制后,十六进制数为: 7e5H

计算过程如下:

首先将二进制数按每4位进行分隔,得到 0111,1110,0101,然后分别计算十六进制数

二进制

0

1

1

1

位数

3

2

1

0

公式

0 * 2^3

2^2

2^1

2^0

结果

0

4

2

1

0 * 2^3 + 2^2 + 2^1 + 2^0 = 0+4+2+4=7

0111 转换为十六进制为 7

二进制

1

1

1

0

位数

3

2

1

0

公式

2^3

2^2

2^1

0 * 2^0

结果

8

4

2

0

2^3+2^2+2^1+0∗2^0=8+4+2+0=14

0111 转换为十六进制为 e

二进制

0

1

0

1

位数

3

2

1

0

公式

0 * 2^3

2^2

0 * 2^1

2^0

结果

0

4

0

1

0∗2^3+2^2+0∗2^1+2^0=0+4+0+1=5

0101 转换为十六进制为 5

最后计算结果为:7e5H

3. 十进制与十六进制之间的转换

3.1. 十六进制转十进制

计算方法为:把十六进制数按权展开,相加既得十进制数。

例如:

十六进制数:7e5H 转十进制后,十进制数为:2021

计算过程如下:

十六进制数

7

e

5

位数

2

1

0

公式

7 * 16^2

14 * 16^1

5 * 16^0

结果

1792

224

5

7 ∗ 16^2 + 14 ∗ 16^1 + 5 ∗ 16^0 = 1792 + 224 + 5 = 2021

最后计算结果为:2021

3.2. 十进制转十六进制

计算方法:十进制数除8取余法,即十进制数除8,余数为权位上的数,得到的商值继续除8,依此步骤继续向下运

算直到商为0为止。

最后读数时,从最后一位读起。

例如:

十进制数: 2021 转十六进制后,十六进制数为: 7e5H

计算过程如下:

第N次

十进制数 2021

余数

第1次

2021 / 16

126

5

第2次

126 / 16

7

14

第3次

7 / 16

0

7

计算完成后,从最后一位读起,最后结果为:7e5H

四、知识小结

通过上面的介绍和例子,相信大家已经对进制有了深刻的认识和理解,一旦你搞懂他们之间的关系,将对我们在

工作中遇到的很多疑问就会迎刃而解,也让我们在处理问题上变的更游刃有余。


http://www.ppmy.cn/news/1535089.html

相关文章

MySQL使用的数据结构

MySQL 作为一个关系型数据库管理系统,内部实现中使用了多种数据结构来优化存储、索引、查询和其他操作。以下是 MySQL 中常用的一些数据结构: 1. B树 用途:B树是 MySQL 最常用的索引数据结构,主要用于InnoDB 和 MyISAM 存储引擎…

cmd命令大全详解

CMD是Windows操作系统中的命令行解释器,它允许用户通过键入命令来执行各种操作。以下是一些常用的CMD命令及其简要说明: dir - 显示目录中的文件和子目录。 cmddir cd - 更改当前目录。 cmdcd [目录路径] mkdir - 创建新目录。 cmdmkdir [目录名] rmd…

C++编程:实现简单的高精度时间日志记录小程序

0. 概述 为了检查是否存在系统时间跳变,本文使用C实现了一个简单的高精度时间日志记录小程序。该程序能够每隔指定时间(默认40毫秒)记录一次系统时间到文件中,并具备以下功能: 自定义时间间隔和文件名:通…

国外电商系统开发-运维系统功能清单开发

一、最终效果图 二、功能清单 功能 描述 自定义日志绘图 根据Nginx、Apache登录日志文件绘图,绘图数据包括:访问量走势,500错误,200正确百分比等 创建服务器 加入服务器 主机状态自动检查 加入主机到系统后,系统…

LabVIEW回转支承间隙自动化检测系统

开发了一种基于LabVIEW软件的回转支承间隙检测系统,通过高精度传感器和数据采集卡,自动化、高效地测量回转支承的轴向间隙和径向间隙,提高了检测精度和生产质量。以下是对系统的详细描述与应用案例分析,希望能为有类似需求的开发者…

Redis篇(最佳实践)(持续更新迭代)

介绍一:键值设计 一、优雅的key结构 Redis 的 Key 虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id]长度不超过 44 字节不包含特殊字符 例如: 我们的登录业务&#xff0…

Leecode热题100-48.旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出…

工控系统组成与安全需求分析

目录 工控系统安全威胁与需求分析工业控制系统安全需求分析 工控系统安全威胁与需求分析 工业控制系统是由各种控制组件监测组件数据处理与展示组件共同构成的,对工业生产过程进行控制和监控的业务流程管控系统。 就是现在有很多工厂,它比如说要生产鞋…