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

计算机中数值表示:原码、反码、补码与移码

1 前言

计算机科学中,数字的表示方式至关重要,因为计算机内部只能识别处理二进制数据。为了在计算机中实现对整数的表示,提出了多种数值编码方式,其中最常用的是原码、反码、补码和移码。

2 原码

2.1 原码的定义

原码(Signed Magnitude)是计算机中用来表示带符号整数的一种编码方式。在原码中,数值的符号(正负)和大小是分开表示的,其符号位用于标识符号(0表示正,1表示负),其余的位则表示该数值的绝对值。

2.2 原码的结构

假设我们使用n位二进制数来表示一个带符号整数,其中:

  • 最高位(符号位):用来表示数值的符号。0表示正数,1表示负数。
  • 其余(n-1)位:用来表示数值的绝对值。

以8位原码为例,其结构如下:

|符号位|数值位|
|-------|-------|
| 1 | 0110 | //表示-6
| 0 | 0110 | //表示+6

例如:

  • +5的原码表示为00000101,符号位为0,表示正数。
  • -5的原码表示为10000101,符号位为1,表示负数。

2.3 原码的优点

  • 直观易懂:原码的表示方式直接,容易理解和使用。数值的符号和大小是清晰分开的,可以方便地进行分析。
  • 简单转换:从十进制转换为原码相对简单,尤其是在仅处理小范围的正整数和负整数时。不需复杂的操作。

2.4 原码的缺点

  • 零的两种表示:在原码中,+0与-0均有不同的二进制表示,分别为00000000和10000000。这可能导致在计算过程中出现混淆,运算时得小心识别。
  • 加法和减法运算复杂:在进行加法和减法时,符号位需要特别处理。例如,两个数相加时需考虑符号,如果符号不同,需要先计算绝对值,再加上符号;如果符号相同,直接相加绝对值并保持符号。这使得运算规则相对复杂。
  • 效率低下:在进行大规模的数值计算时,由于对符号位的额外处理,运算时间和资源的消耗相对较高。

2.5 原码的运算

虽然原码简单明了,但进行加法和减法运算时会显得复杂。我们来举个例子:

加法运算

考虑两个数相加:+5(00000101)和-3(10000011),我们需要进行以下步骤:

  • 先提取符号位和数值部分。
  • +5为正数,-3为负数。
  • 计算绝对值的差:5 - 3 = 2。
  • 符号判断:由于5的符号为正,因此结果为00000010(+2)。

不过,如果处理两个负数相加,比如-5(10000101)和-3(10000011):

  • 先提取符号和数值部分。
  • 由于都是负数,先计算绝对值的和:5 + 3 = 8。
  • 符号判断:由于原码都是负的,所以结果为10001000(-8)。

在这个过程中,需要清除对符号的关注,来确保结果正确。

减法运算

减法在原码中同样复杂,通常需要将一个数的原码转换成对应的加法。

例如,计算-5(10000101)减去-3(10000011)相当于:-5 + 3。

  • -5的运算部分为10000101,-3的为10000011,求其绝对值差。
  • 计算-5 + +3,结果是-2,即10000010。

这样的运算继承了加法的复杂性,尤其是符号的处理和加减过程中的计算负数绝对值都显得较为繁琐。

3 反码

3.1 反码的定义

反码(One’s Complement)是一种用于表示带符号整数的编码方式。与原码相似,反码同样使用最高位作为符号位。但不同之处在于,反码是通过对原码中数值位进行“取反”来获得的:

  • 正数的反码与原码相同。
  • 负数的反码是其原码中除符号位外的所有位进行取反(0变成1,1变成0)。

以8位二进制数为例:

  • +5的原码是00000101,其反码也是00000101。
  • -5的原码是10000101,而其反码为11111010(位数取反)。

反码用于表示负数的主要目的,是希望通过简单的位操作使得计算机能够方便地进行加法与减法运算。

3.2 反码的结构

假设我们使用n位二进制数来表示带符号整数,其中:

  • 最高位(符号位):用来表示数值的符号。0表示正数,1表示负数。
  • 数值位:负数的数值位是原码数值位的取反。

例如,考虑8位反码的表示:

|符号位|数值位|
|-------|-------|
| 1 | 1101 | //表示-5的反码
| 0 | 0011 | //表示+3的反码

3.3 反码的优点

  • 计算简单性:反码使负数的表示简洁明了,相比原码在计算时更有利于运算。

  • 简单的减法实现:反码能够更容易地进行减法运算,减法可以通过加上被减数的反码来实现。

3.4 反码的缺点

  • 零的两种表示:和原码一样,反码也存在两个零的表示:+0(00000000)和-0(11111111)。这种二义性会对后续的计算造成困扰。
  • 运算复杂性:虽然反码能够简化减法,但在加法过程中仍然需要处理进位问题。如果符号位相同,需要加和并进行进位处理,而没有直接的加法运算规则。
  • 不直观:与原码相比,反码的直观性稍弱,尤其对于较复杂的数值操作,可能导致理解上的误区。

3.5 反码的运算

反码的加减法运算较为特殊,一般情况下需要注意如下几个点:

加法运算

进行反码的加法运算时,公式的关键是判断符号位:

  • 同符号相加:如果两个操作数的符号相同,直接将对应的数值位相加,同时保留符号位。
  • 不同符号相加:当符号位不同,需要减去较小绝对值,并保持符号。

考虑两个数的加法:

+5(原码为00000101,反码为00000101)
+ -3(原码为10000011,反码为11111100)

进行加法:

  00000101
+ 11111100
-----------
= 11111001

结果为11111001,需要对结果进行进位处理。在8位二进制中,11111001表示为-2(反码)。

减法运算

减法运算在反码中可通过加反码实现,即用被减数的反码替代减法。公式是:

A - B = A + (-B)

计算-5(反码为11111010)减去3(反码为00000011):

-5 - 3 = -5 + (-3) = -5 + 11111100

进行加法:

  11111010
+ 11111100
-----------
= 11110110

结果为11110110,表示-8,其中符号位为1,表示结果为负数。

4 补码

4.1 补码的定义

补码(Two’s Complement)是一种广泛用于计算机内部整数表示的编码方式。它解决了原码和反码中存在的一些问题,尤其是符号表示和结果的唯一性。补码的主要思想是将负数通过对原码取反后加1来表示,使得计算机能够以相同的硬件结构实现加、减运算。

4.2 补码的结构

在补码表示中,采用n位二进制数,其中:

  • 最高位(符号位):0表示正数,1表示负数。
  • 数值位:表示整数的值,负数的补码是通过对原码按位取反后加1而得到的。

以8位补码为例:

  • +5的原码为00000101,补码也是00000101。
  • -5的原码为10000101,首先取反为01111010,然后加1得到补码01111011,即10000111。

具体表示如下:

|符号位|数值位|
|-------|-------|
| 1 | 11111011 | //表示-5
| 0 | 00000101 | //表示+5

4.3 补码的计算规则

4.3.1 正数的补码

正数的补码与原码相同,最高位为0。

4.3.2 负数的补码

负数的补码计算过程为:

  • 取原码。
  • 对原码的数值位进行按位取反(除符号位外)。
  • 最后在得到的反码基础上加1。

例如,计算-3的补码:

  • 原码(-3)为10000011。
  • 按位取反得到11111100。
  • 加1得到11111101。

因此,-3在8位补码中为11111101。

4.4 补码的优点

  • 唯一零的表示:与原码和反码不同,补码只有一种0的表示方式,即00000000。这有效避免了对零的二义性问题。
  • 简化运算:由于加法和减法都可以通过补码实现,计算机设计中的电路和逻辑变得更加简便,所有的整数运算都可以通过加法器完成。这让硬件设计变得简洁高效,加速了运算过程。
  • 快速溢出检测:补码的加法运算能够方便地对溢出进行检测。当两个符号相同且结果符号不同,表示发生了溢出,这是在很多系统中进行错误检测的重要机制。

4.5 补码的缺点

  • 负数的表示范围:在进行数值表示时,补码的表示范围相对原码和反码有所差异,具体来说,使用n位补码表示时,负数范围为-2(n-1)到-1,而正数范围则为0到2(n-1)-1,可能导致表示范围限制。
  • 计算机处理复杂性:尽管补码做了一定的简化,在处理超大范围及浮点数时,仍然需要更复杂的运算机制。

4.6 补码的运算

加法运算

进行补码加法时,两个数的补码可以直接相加。如果结果中出现进位,需要注意符号的处理。

例如,计算 +5(00000101) 和 -3(11111101) 的加法:

  00000101 // +5
+ 11111101 // -3
-----------00000010 // +2

如果结果发生了进位,具体处理方式为:

  • 例如,计算 +100(01100100) 和 +28(00011100) 的补码相加:
  01100100 // +100
+ 00011100 // +28
-----------10000000 // 由于最高位为1,结果表示负数

这个操作要注意,当符号不同的数相加时,较大的数决定了结果的符号。

减法运算

减法运算可以通过补码的加法来实现,即 ( A - B ) 转换为 ( A + (-B) ),而 ( B ) 的补码就是 ( )的反码加上1。

例如,计算 -5(补码为11111011) 和 -3(补码为11111101) 的减法:

-5 - (-3) = -5 + 3

-5 的补码:11111011

3 的补码:00000011

  11111011 // -5
+ 00000011 // +3 (取3的补码)
-----------11111110 // 结果为-2

5 移码

5.1 移码的定义

移码是一种为了解决有符号数表示中的符号问题而产生的编码形式。通过对数值进行平移,移码确保了所有数值都是正数。因此,它可以将负数的表示转换为正数的范围。移码通常在某些应用中(如浮点数标准的指数部分)使用。

5.2 移码的表示方式

移码的基本想法是通过“偏移”来转换数值。在n位移码中,采用一个偏移量(K)对数值进行编码。偏移量是一个正数,通常取决于数值的范围。

对于一个具体的有符号整数x,如果要用n位移码表示,所使用的移码为:

[ \text{移码} = x + K ]

其中,K 通常为 (2^{(n-1)}),也就是将负数偏移到正数的表示空间。

例如,对于8位移码(n=8),K=127(即 (2^{(8-1)} - 1 = 127)):

  • 正数和零的移码直接加上127。
  • 负数的移码则是其绝对值加上127。

假设我们用8位表示移码,K=127:

  • +5 的移码表示: [ 5 + 127 = 132 \Rightarrow \text{二进制为} 10000100 ]
  • -5 的移码表示: [ -5 + 127 = 122 \Rightarrow \text{二进制为} 01111010 ]
    +0 的移码表示: [ 0 + 127 = 127 \Rightarrow \text{二进制为} 01111111 ]
    -1 的移码表示: [ -1 + 127 = 126 \Rightarrow \text{二进制为} 01111110 ]

在以上例子中,所有的数值都变成了正数的表示。

5.3 移码的优点

  • 统一处理正负数:移码的表示方式使得正数和负数都可以用相同方式处理,方便进行加减运算。
  • 避免了零的多重表示:在移码中,0只有一种表示方式,避免了原码和反码那种两种零的情况。
  • 简化了比较操作:由于移码的所有数值都是正数,数值之间的比较操作可以直接用无符号数的方式进行,算法简洁。
  • 易于实现加法:在硬件实现上,加法可以直接通过逻辑电路进行,不需要特别处理符号。

5.4 移码的缺点

  • 范围限制:移码的表示范围常常比某些其他表示形式小,例如在n位移码中,最大的正整数和最小的负整数的距离并不对称,这可能造成溢出问题。
  • 不直观:由移码表示的数值对于人类来说可能不够直观,例如需要进行加减运算时,需要先将结果转换回原数值。
  • 较少使用:和原码、补码等方法相比,移码的使用场景较少,易于理解和实现,但在现代编程中通常不作为主要数值表示方法。

5.5 移码的运算

移码的加减法运算比较直接。移码的加法规则通常遵循以下步骤:

加法运算

对于移码(a和b)进行加法时:

  • 直接相加:将两个移码直接相加。
  • 反回结果:相加后的结果要减去K(即可转换为原数值),但通常在计算机中采用相同数量的位表示,不需要改变。

例如,两个8位的移码:

a = 5(10000100)
b = 3(10000011)求解 a + b = 10000100 + 10000011

这两个数相加,得到:

  10000100
+ 10000011
-----------00000111 (进位不会影响8位,溢出不处理)

结果为00000111,即原数值的6。

  • 如果轮换得到一个负数,需将结果加上127,转回对应的数值。

减法运算

移码减法可以通过将被减数的移码加上减数的移码。可以通过将减数转换为移码,再进行加法运算。

例如,计算5 - 3:

移码(a) = +5(10000100)
移码(b) = +3(10000011)移码(b) 变成:-3 : -3 + 127 = 124 -> 01111100= +5 + (-3) = 10000100 + 01111100

计算机内部,数值的不同表示方式有着各自的优缺点。原码直观但计算复杂,反码尝试简化减法运算却依然不能解决零的表示问题。补码则是最为广泛使用的表示法,解决了运算与表示的诸多问题。移码则在浮点数的表示中提供了一种有效的方案。

6 总结

  • 原码:正数是其二进制本身;负数是符号位为1,数值部分取X绝对值的二进制。
  • 反码:正数的反码和原码相同;负数是符号位为1,其它位是原码取反。
  • 补码:正数的补码和原码,反码相同;负数是符号位为1,其它位是原码取反,未位加1。(或者说负数的补码是其绝对值反码未位加1)
  • 移码:将符号位取反的补码(不区分正负)

举个例子以一个字节8位说明:

在这里插入图片描述
关系图:

在这里插入图片描述

相关文章:

计算机中数值表示:原码、反码、补码与移码

1 前言 计算机科学中,数字的表示方式至关重要,因为计算机内部只能识别处理二进制数据。为了在计算机中实现对整数的表示,提出了多种数值编码方式,其中最常用的是原码、反码、补码和移码。 2 原码 2.1 原码的定义 原码(Signed …...

1.8 组合模式(Composite Pattern)

定义 组合模式(Composite Pattern) 是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式让客户端可以以相同的方式对待单个对象和对象集合。组合模式使得客户可以统一处理树形结构中的单个对象和对象的集合…...

QFileDialog::getOpenFileName(this,“文件对话框“,“.“,“c++ files(*.cpp);;“); 文件对话框显示乱码

在使用 QFileDialog::getOpenFileName 时,如果文件对话框显示乱码,通常是因为编码问题。Qt 默认使用 UTF-8 编码,但如果你的系统或源代码文件的编码不一致,可能会导致乱码。 以下是几种可能的解决方法: 1. 确保源代码…...

【C语言系列】深入理解指针(5)

深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…...

为什么使用nohup 和 启动的python脚本,日志没有在nohup.out中

当你使用 nohup 和 & 启动 Python 脚本时,输出通常会被重定向到 nohup.out 文件,但是有几个原因可能导致日志没有出现在这个文件中: Python 程序的输出被重定向了: 如果你的 Python 脚本中使用了 sys.stdout 或 sys.stderr 进…...

MySQL的存储引擎对比(InnoDB和MyISAM)

InnoDB 特点: 事务支持:InnoDB 是 MySQL 默认的事务型存储引擎,支持 ACID(原子性、一致性、隔离性、持久性)事务。行级锁定:支持行级锁,能够并发执行查询和更新操作,提升多用户环境…...

uniapp访问django目录中的图片和视频,2025[最新]中间件访问方式

新建中间件, middleware.py 匹配,以/cover_image/ 开头的图片 匹配以/episode_video/ 开头的视频 imageSrc: http://192.168.110.148:8000/cover_image/12345/1738760890657_mmexport1738154397386.jpg, videoSrc: http://192.168.110.148:8000/episode_video/12345/compres…...

Python递归复习题

寒假打卡第二十一天&#xff0c;当前mit6.100L进度(16/26) &#xff0c;今天补一下递归复习题。 问题1&#xff1a;编写一个递归程序来计算正和n&#xff08;n-2&#xff09;&#xff08;n-4&#xff09;的整数&#xff08;直到且不包括n-x<0&#xff09; def sum_series(n…...

2025 年前端开发趋势展望,开启新征程

新年伊始&#xff0c;作为一名深耕 Web 前端开发领域的博主&#xff0c;我迫不及待地想和大家分享我对 2025 年前端开发趋势的洞察。过去一年里&#xff0c;前端领域的技术创新和变革令人目不暇接&#xff0c;而新的一年&#xff0c;更是充满无限可能。 框架与工具的持续演进 …...

90,【6】攻防世界 WEB Web_php_unserialize

进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file&#xff0c;默认值为 index.phpprivate $file index.php;// 构造函数&#xff0c;当创建类的实例时会自动调用// 接收一个参数 $file&#xff0c;用于初始化对象的 $file 属…...

Redis --- 使用GEO实现经纬度距离计算

什么是GEO&#xff1f; Spring Boot 项目中可以通过 Spring Data Redis 来使用 Redis GEO 功能&#xff0c;主要通过 RedisTemplate 和 GeoOperations 接口来操作地理位置数据。 Service public class GeoService {Autowiredprivate RedisTemplate<String, Object> red…...

同步 CDC

同步 CDC 当设计包括来自同一 MMCM/PLL 的时钟之间的同步 CDC 路径时&#xff0c;您可以使用以下技术来更好地控制时钟插入延迟和 时滞&#xff0c;并因此控制这些路径上的松弛。 重要提示&#xff1a; 如果 CDC 路径在源自不同 MMCM/PLL 的时钟之间&#xff0c;则跨越 …...

Linux环境下载Ollama慢或卡顿解决方案

一、下载方式 官方下载方式是到ollama官网下载ollama: https://ollama.com/ 复制下载链接执行&#xff1a; curl -fsSL https://ollama.com/install.sh | sh二、卡顿现象 执行后经常会出现下载失败或者进度条特别慢的情况&#xff0c;甚至直接退出下载&#xff1a; 三、…...

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测&#xff0c;到2025年全球 AI 安全解决方案市场规模将突破200亿美元&#xff0c;年复合增长率超过30%&#xff0c;而Gartn…...

2025年家用音响市场分析:潜力无限,音质为王的新纪元

引言&#xff1a;音质革命引领市场新风尚 在数字化浪潮的推动下&#xff0c;家用音响市场正经历一场前所未有的变革&#xff0c;其增长潜力犹如破晓之光&#xff0c;照亮了音频技术的未来之路。随着消费者对高品质生活追求的不断提升&#xff0c;以及对智能家居生态融合的日益…...

neo4j-在Linux中安装neo4j

目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的&#xff0c;而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8&#xff0c;它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…...

AI 场景下,函数计算 GPU 实例模型存储最佳实践

作者&#xff1a;有松 当前&#xff0c;函数计算 FC 已被广泛应用在各种 AI 场景下&#xff0c;函数计算支持通过使用容器镜像部署 AI 推理应用&#xff0c;并且提供多种选项来访问训练好的模型。为了帮助开发者高效地在函数计算上部署 AI 推理应用&#xff0c;并快速解决不同…...

股指入门:股指期货是什么意思?在哪里可以做股指期货交易?

股指期货是一种以股票指数为标的物的期货合约&#xff0c;也可以称为股票指数期货或期指。 股指期货是什么意思&#xff1f; 股指期货是一种金融衍生品&#xff0c;其标的资产是股票市场上的股指&#xff0c;例如标普500指数、道琼斯工业平均指数、上证50指数等。 股指期货允…...

【分布式理论六】分布式调用(4):服务间的远程调用(RPC)

文章目录 一、RPC 调用过程二、RPC 动态代理&#xff1a;屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC 序列化四、RPC 协议编码1. 协议编码的作用2. RPC 协议消息组成 五、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC 调用过程 RPC&#xff08…...

aliyun 的 ip 设置方法

aliyun 的 ip 设置方法 阿里云&#xff1a;网络编程 bind&#xff1a;cannot assign requested address errno:99 问题。 公网IP,&#xff0c;弹性公网IP&#xff0c;主私网IP 1. 公网IP, --> NAT --> 主私网IP &#xff0c;设置方法&#xff1a; 服务器端 ip 为&…...

ASP.NET Core分布式缓存

目录 分布式缓存 概述 IDistributedCache接口中定义的主要方法及主要的扩展方法 用什么做缓存服务器 使用 封装分布式缓存操作 分布式缓存 概述 分布式系统中&#xff0c;内存缓存不满足要求的话&#xff0c;把缓存数据保存到专门的缓存服务器&#xff0c;所有Web应用通…...

【CUDA】内存模型

目录 一、Programmable 1.1 寄存器(Registers) 1.2 本地内存(Local Memory) 1.3 共享内存(shared Memory) 1.4 常量内存(Constant Memory) 1.5 全局内存(Global Memory) 1.6 纹理内存(Textrue Memory) 1.7 总结 二、Cache(Non-programmable) 三、固定内存 四、零拷贝…...

使用Pygame制作“吃豆人”游戏

本篇博客展示如何使用 Python Pygame 编写一个简易版的“吃豆人&#xff08;Pac-Man&#xff09;” 风格游戏。这里我们暂且命名为 Py-Man。玩家需要控制主角在一个网格地图里移动、吃掉散布在各处的豆子&#xff0c;并躲避在地图中巡逻的幽灵。此示例可帮助你理解网格地图、角…...

Pyecharts系列课程04——折线图/面积图(Line)

本章我们学习在Pyecharts中折线图&#xff08;Line&#xff09;的使用。折线图通用应用于数据的趋势分析。 折线图 我们现在有两组数据&#xff0c;x_data是2024年的月份&#xff0c;y_data为对应张三甲每个月的用电量。 # 家庭每月用电量趋势 x_data ["1月", &q…...

mysql 学习10 多表查询 -多表关系,多表查询

多表关系 一对多 多对多 创建学生表 #多对多表 学生选课系统create table student(id int primary key auto_increment comment 主键ID,name varchar(64) comment 姓名,studentnumber varchar(10) comment 学号 )comment 学生表;insert into student(id,name,studentnumber)va…...

lambda 表达式详解

lambda 表达式详解 lambda 表达式详解基本语法示例代码及详细解释1. 简单的lambda表达式2. 带参数的lambda表达式3. 捕获外部变量4. 使用mutable关键字修改捕获的变量5. 按引用捕获外部变量6. 自动推导返回类型 捕获列表的几种形式总结 Lambda表达式的常用的应用场景&#xff1…...

从0开始达芬奇(3.5)

媒体优化 顾名思义就是降低分辨率等来使素材的回放更加流畅。&#xff08;在低配电脑上也可以流畅运行&#xff09; ⭐方法一&#xff1a;&#xff08;一般使用第二种&#xff09; 播放→代理模式→二分之一或者四分之一 ⭐⭐⭐方法二&#xff1a;优化媒体文件&#xff08;简…...

【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据

一、下载z-paing插件 注意下载下载量最多的这个 进入Hbuilder以后点击“确定” 插件的官方文档地址&#xff1a; https://z-paging.zxlee.cn 二、z-paging插件的使用 在文档中向下滑动&#xff0c;会有使用方法。 使用z-paging标签将所有的内容包起来 配置标签中的属性 在s…...

Ubuntu20.04 本地部署 DeepSeek-R1

一、下载ollama 打开 ollama链接&#xff0c;直接终端运行提供的命令即可。如获取的命令如下&#xff1a; curl -fsSL https://ollama.com/install.sh | sh确保是否安装成功可在终端输入如下命令&#xff1a; ollama -v注意&#xff1a; 如遇到Failed to connect to github.…...

Linux 设备驱动分类(快速理解驱动架构)

Linux 设备驱动分类&#xff08;快速理解驱动架构&#xff09; 在 Linux 设备驱动开发中&#xff0c;最基础的概念就是 设备驱动的分类。 Linux 设备驱动主要分为 字符设备、块设备和网络设备&#xff0c;它们分别对应不同类型的硬件资源。 理解这些分类&#xff0c;不仅能帮助…...

Java语法糖详解

前言 在现代编程语言的发展历程中&#xff0c;语法糖&#xff08;Syntactic Sugar&#xff09;作为一种提升代码可读性和开发效率的重要特性&#xff0c;已经成为语言设计的重要组成部分。Java作为一门成熟且广泛应用的编程语言&#xff0c;在其长期演进过程中&#xff0c;语法…...

567.字符串的排列

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 用两个哈希表比较来判断。s1的哈希表是否与s2相同。在窗口滑动过程中&#xff0c;用哈希表来维护。 2.2 代码尝试 class Solution { pub…...

DB2和mysql关于表和索引是否需要reorg的研究

DB2&#xff1a; DB2有个reorgchk的命令&#xff0c;是从SYSSTAT.TABLES和syscat.indexes这两个系统表中查表和索引的信息&#xff0c;并给出是否需要reorg表和索引的建议。 [db2inst1t3-ucm-ucm-rdb ~]$ db2 reorgchk CURRENT STATISTICS on table DB2ADMIN.ACAGENTTREE Ta…...

【Linux系统编程】:自旋锁,读写锁

文章目录 前言1. POSIX自旋锁1.1.定义自旋锁1.2.初始化1.3. 加锁1.4. 尝试加锁操作1.5. 解锁操作1.6. 销毁操作1.7.示例1.8.优缺点优点缺点 1.9.适用场景 2. 读写锁2.1 读写锁的工作原理2.2 读写模型2.3 常用接口2.3.1 定义锁并初始化2.3.2 申请读锁2.3.3 申请写锁2.3.4 解锁2.…...

位运算及常用技巧

涉及位运算的运算符如下表所示&#xff1a; 位运算的运算律&#xff1a; 负数的位运算 首先&#xff0c;我们要知道&#xff0c;在计算机中&#xff0c;运算是使用的二进制补码&#xff0c;而正数的补码是它本身&#xff0c;负数的补码则是符号位不变&#xff0c;其余按位取反…...

Chrome 浏览器:互联网时代的浏览利器

Chrome 浏览器&#xff1a;互联网时代的浏览利器 引言 在互联网时代&#xff0c;浏览器已经成为我们日常生活中不可或缺的工具。作为全球最受欢迎的浏览器之一&#xff0c;Chrome 浏览器凭借其出色的性能、丰富的扩展程序和简洁的界面&#xff0c;赢得了广大用户的喜爱。本文…...

web-文件上传-CTFHub

前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…...

【react】react面试题

react面试题 对 React 的理解、特性 react18有哪些更新 JSX是什么 解释为什么浏览器不能读取jsx ReactNative中&#xff0c;如何解决8081端口被占用而提示无法访问的问题&#xff1f; React 生命周期 react事件机制 react 组件传值 React改变state的方式 re…...

逐笔成交逐笔委托Level2高频数据下载和分析:20250206

Level2逐笔成交逐笔委托数据分享下载 通过Level2逐笔成交和逐笔委托这种每一笔的毫秒级别的数据可以分析出很多有用的点&#xff0c;包括主力意图&#xff0c;虚假动作&#xff0c;让任何操作无所遁形。适合交易大师来分析主力规律&#xff0c;也适合人工智能领域的机器学习&a…...

__cvta_generic_to_shared

一 测试代码 #include <cuda_runtime.h> #include <cstdio> #include <cstdint>__global__ void test_cp_async(int* __restrict__ A,int* __restrict__ B){int tid = threadIdx.x;A[tid] = tid;__shared__ int smem[32];size_t smemAddr = __cvta_generic_…...

C++学习——缺省参数、重载函数、引用

目录 前言 一、缺省参数 1.1概念 1.2写法 1.3半缺省 1.4使用 二、重载函数 2.1.概念 2.2类型 2.3参数 2.4顺序 2.5问题 2.6原理 三、引用 1、引用是什么&#xff1f; 2、引用的使用方法 3、引用特性 1、引用在定义的时候必须要初始化 2、一个变量会有多个引用…...

docker-compose 配置nginx

前言 前端打包的dist文件在宿主机&#xff0c;nginx运行在docker-compose 问题 nginx.conf 在本地配置可以生效&#xff0c;但是链接到容器就报错 基于本地的nginx运行&#xff0c;本地nginx.conf 如下 server {listen 8081;location / {root /usr/local/software/testweb/…...

LQB(0)-python-基础知识

一、Python开发环境与基础知识 python解释器&#xff1a;用于解释python代码 方式&#xff1a; 1.直接安装python解释器 2.安装Anaconda管理python环境 python开发环境&#xff1a;用于编写python代码 1.vscode 2.pycharm # 3.安装Anaconda后可以使用网页版的jupyter n…...

【C语言】指针运算与数组关系:详细分析与实例讲解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;1. 指针的基础运算1.1 指针的加减运算1.2 指针加整数与指针减整数1.3 指针与指针的运算 &#x1f4af;2. 指针的实际应用&#xff1a;模拟 strlen 函数2.1 使用指针模拟…...

C++数组

指针&#xff0c;是C数组工作方式的基础。 数组&#xff0c;基本上是元素的集合。按特定的顺序排列的一堆东西。 C数组&#xff0c;就是表示一堆的变量组成的集合。一般是一行相同类型的变量。 例子&#xff1a; #include <iostream> int main() {int example[5];exa…...

OSPF基础(2)

一、LSA的头部 LSA是OSPF的一个核心内容&#xff0c;如果没有LSA&#xff0c;OSPF是无法描述网络的拓扑结构及网段信息的,也无法传递路由信息&#xff0c;更加无法正常工作&#xff0c;在OSPFV2中&#xff0c;需要我们掌握的主要有6种。 LSA头部一共20byte&#xff0c;每个字段…...

DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求

DeepSeek 的 LLM 推理新方法 DeepSeek 推出了一种创新方法&#xff0c;通过强化学习 (RL) 来提高大型语言模型 (LLM) 的推理能力&#xff0c;其最新论文 DeepSeek-R1 对此进行了详细介绍。这项研究代表了我们如何通过纯强化学习来增强 LLM 解决复杂问题的能力&#xff0c;而无…...

javaEE-6.网络原理-http

目录 什么是http? http的工作原理&#xff1a; 抓包工具 fiddler的使用 HTTP请求数据: 1.首行:​编辑 2.请求头(header) 3.空行&#xff1a; 4.正文&#xff08;body&#xff09; HTTP响应数据 1.首行&#xff1a;​编辑 2.响应头 3.空行&#xff1a; 4.响应正文…...

把bootstrap5.3.3整合到wordpress主题中的方法

以下是将 Bootstrap 5.3.3 整合到 WordPress 主题中的方法&#xff1a; 下载 Bootstrap 文件&#xff1a;从 Bootstrap 官网下载最新的 5.3.3 版本的 CSS 和 JavaScript 文件。 上传文件到主题目录&#xff1a;将下载的 CSS 文件上传到 WordPress 主题文件夹中的 /css 文件夹…...

深度整理总结MySQL——Buffer Pool工作原理

Buffer Pool工作原理 前言为什么会有Buffer PoolBuffer Pool介绍Buffer Pool有多大Buffer Pool缓存什么呢Buffer Pool碎片空间查询一条记录&#xff0c;就只需要缓冲一条记录吗 如何管理Buffer Pool如何管理空闲页如何管理脏页如何提高缓存命中率 LRU带来的问题预读失效Buffer …...