关于“进制”那些你不知道的事~

本文深入探讨数据存储的本质,包括内存的概念及其在数据处理中的角色,数据如何以二进制形式存储,不同进制间的转换方法,以及计算机采用补码存储数据的原理。通过具体实例,解析数据存储过程中的关键技术。

数据存储

1、对于数据存储的思考

  • 为什么使用计算机?

    为了存储、处理数据

  • 数据存在哪里?

    数据存储在内存中

  • 内存是怎么存储数据的?

    首先要弄清楚怎么存储数字

2、内存

  • 概念

    内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行

  • 抽象

    一个开关,有两种状态,开启和关闭,一种对应1,另一种对应0。把八个开关放到一间房子里,可以称这间房子为“一个字节”,一个开关代表“一位”。每个房间都有门牌号,看做“地址”。把无数个房间叠起来组成摩天大厦,可以把摩天大厦看成内存

  • 单位

  • 说明

    内存中以二进制形式存储数据

3、进制

  • 十进制

    特性:逢十进一

    数字:0 1 2 3 4 5 6 7 8 9

    计算:1 + 9 = 10

  • 二进制

    特性:逢二进一

    数字:0 1

    计算:1 + 1 = 10

  • 八进制

    特性:逢八进一

    数字:0 1 2 3 4 5 6 7

    计算:1 + 7 = 10

  • 十六进制

    特性:逢十六进一

    数字:0 1 2 3 4 5 6 7 8 9 a b c d e f

    计算:1 + f = 10

4、进制转换

  • 十进制转二进制

    公式:倒除法,余数逆序

    转换:10(10) --> 1010 (2)

  • 二进制转十进制

    公式:计算每一位的2的位数次方,再相加

    转换:1010(2) --> 0 x 2^0 + 1 x 2^1 + 0 x 2^2 + 1 x 2^3 = 0+2+0+8 = 10(10)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIQBej4G-1589537250450)(进制.assets/截屏2020-01-09上午10.03.44.png)]

  • 二进制转八进制

    公式:【三位一取】从低位开始,每三位得到一个八进制数字,最后高位不足则补0

    转换:010110011(2) --> 263 (8)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9KaPT3d-1589537250452)(进制.assets/空白-5.png)]

  • 二进制转十六进制

    公式:【四位一取】从低位开始,每四位得到一个十六进制数字,最后高位不足则补0

    转换:100101100(2) --> 12C (16)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-it1YnGBa-1589537250454)(进制.assets/空白.png)]

  • 八进制转二进制

    公式:【一转3位】八进制的一位相当于二进制的3三位,计算时按照十进制数字转换

    转换:263(8) --> 010110011(2) (2)

  • 十六进制转二进制

    公式:【一转4位】十六进制的一位相当于二进制的4位,计算时按照十进制数字转换

    转换:12C(16) --> 100101100 (2)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KRRm8Hni-1589537250456)(进制.assets/空白-2-8539556.png)]

5、存储数据

  • 数据存储过程

    a、计算机存储数据,先开辟空间,再存储数据,计算机开辟内存空间最小单位是字节

    b、在存储数据时,用最高位表示符号位,用0表示正数1表示负数,其他的表示数据

  • 原码

    概念:规定了字节数,写明了符号位,得到数据的原码

    示例:

    ​ 数字正1的原码: 0000 0000 0000 0000 0000 0000 0000 0001

    ​ 数字负1的原码: 1000 0000 0000 0000 0000 0000 0000 0001

    思考:计算机是如何用二进制存储数据的,是不是用的原码的形式?

    验证:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLEfl1PC-1589537250456)(进制.assets/2.png)]

    结论:计算机不以原码的形式存储数据

  • 反码

    概念:正数的反码就是其原码,负数的反码是其符号位不动,其他为取反

    示例:

    ​ 数字正1的反码: 0000 0000 0000 0000 0000 0000 0000 0001

    ​ 数字负1的反码: 1111 1111 1111 1111 1111 1111 1111 1110

    思考:计算机是如何用二进制存储数据的,是不是用的反码的形式?

    验证:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lHMRPwl-1589537250457)(进制.assets/3.png)]

    结论:计算机不以反码的形式存储数据

  • 补码

    概念:正数的补码是其反码,正数三码合一,负数的补码是其反码加1

    示例:

    ​ 数字正1的补码: 0000 0000 0000 0000 0000 0000 0000 0001

    ​ 数字负1的补码: 1111 1111 1111 1111 1111 1111 1111 1111

    思考:计算机是如何用二进制存储数据的,是不是用的补码的形式?

    验证:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OChAm6P5-1589537250458)(进制.assets/4.png)]

    说明:高位溢出

    结论:计算机以补码的形式存储数据

  • 知道补码求取真实数据

    原理:看成原码,求其补码,得到的补码就是数据的原码

    a、内存数据:1111 1111 1111 1111 1111 1111 1111 1101

    b、看成原码:1111 1111 1111 1111 1111 1111 1111 1101

    c、求其反码:1000 0000 0000 0000 0000 0000 0000 0010

    d、求其补码:1000 0000 0000 0000 0000 0000 0000 0011

    e、数据原码:1000 0000 0000 0000 0000 0000 0000 0011

    f、真实数据:-3
    在这里插入图片描述

<think>好的,用户现在问的是在预编译二进制安装方法中,如何将路径写入~/.bashrc或~/.zshrc以永久生效。首先,我需要回顾之前的对话,确保自己准确理解上下文。之前讨论的是预编译二进制和源码编译安装的区别,用户现在想具体了解如何配置环境变量,使得安装后的二进制文件可以在任何终端会话中使用。 首先,我应该确认用户可能已经下载并解压了预编译的二进制文件,但可能没有正确设置PATH环境变量,导致无法在任意目录下运行命令。常见的场景是用户将二进制文件放在某个目录下,比如/opt/llvm/bin,但终端无法找到这些可执行文件,因为没有添加到PATH中。 接下来,需要解释如何找到二进制文件的位置。用户可能确定解压后的路径在哪里,所以需要指导他们使用cd命令进入解压后的目录,并通过pwd获取绝对路径。例如,解压到~/software/llvm-15.0.0,那么bin目录的路径就是~/software/llvm-15.0.0/bin。 然后,需要详细说明如何将路径添加到.bashrc或.zshrc中。这里要区分同的shell,因为bash和zsh的配置文件同。用户可能清楚自己使用的是哪种shell,所以可能需要提醒他们通过echo $SHELL来确认。但为了覆盖所有情况,可以分别给出两种配置方法。 另外,用户可能对如何编辑配置文件熟悉,特别是使用命令行编辑器如nano或vim。可能需要给出具体的命令示例,比如使用nano ~/.bashrc,然后添加export PATH="$PATH:/path/to/bin",保存退出后运行source命令使更改生效。 还需要注意,用户可能添加路径时出错,比如路径拼写错误或者没有正确使用引号。应该提醒他们仔细检查路径是否正确,以及是否使用了正确的语法。此外,如果用户同时使用多个终端,比如同时使用bash和zsh,可能需要更新两个配置文件。 最后,验证步骤很重要。用户可能知道如何检查PATH是否已经更新,所以需要指导他们使用echo $PATH或者which命令来确认。例如,如果安装的是clang,运行which clang应该显示新添加的路径。 潜在的问题可能包括用户权限问题,比如没有写入配置文件的权限,或者路径中有空格或特殊字符需要转义。此外,如果用户之前已经修改过PATH,可能需要确保新的路径被正确追加而是覆盖。需要提醒用户使用$PATH:新路径的方式,而是直接覆盖整个PATH变量。 总结来说,我需要分步骤清晰地引导用户找到二进制路径、编辑配置文件、应用更改并验证,同时注意可能出现的常见错误和解决方法,确保用户能够顺利完成配置并永久生效。</think>--- ### **预编译二进制安装后配置环境变量的方法** 在预编译二进制安装中,**将可执行文件路径添加到 `~/.bashrc` 或 `~/.zshrc`** 的目的是让系统在任何终端会话中都能找到安装的二进制程序(如 `clang`、`lld` 等)。以下是具体操作步骤: --- #### **1. 确认二进制文件的安装路径** 假设你已经将预编译的 LLVM 解压到某个目录(例如 `/opt/llvm` 或 `~/software/llvm-15.0.0`),需找到其中的 `bin` 目录路径。 通过以下命令检查: ```bash # 进入解压后的目录 cd /path/to/your/llvm # 查看 bin 目录的完整路径 pwd # 例如输出:/home/user/llvm-15.0.0/bin ``` --- #### **2. 将路径添加到 Shell 配置文件** 根据你使用的 Shell 类型(Bash 或 Zsh),编辑对应的配置文件: - **Bash 用户** 修改 `~/.bashrc`: ```bash echo 'export PATH="$PATH:/path/to/your/llvm/bin"' >> ~/.bashrc ``` - **Zsh 用户** 修改 `~/.zshrc`: ```bash echo 'export PATH="$PATH:/path/to/your/llvm/bin"' >> ~/.zshrc ``` --- #### **3. 生效配置** 修改后需重新加载配置文件(或重启终端): ```bash # 如果是 Bash source ~/.bashrc # 如果是 Zsh source ~/.zshrc ``` --- #### **4. 验证是否生效** 检查环境变量是否包含新路径: ```bash echo $PATH # 输出应包含类似:...:/path/to/your/llvm/bin ``` 测试二进制程序是否可调用: ```bash clang --version # 或 llvm-config --version ``` --- ### **注意项** 1. **路径准确性** - 确保路径中的 `/path/to/your/llvm/bin` 替换为你的实际路径(例如 `/opt/llvm-15.0.0/bin`)。 - 如果路径包含空格或特殊字符,需用引号包裹:`export PATH="$PATH:/path/with spaces/bin"` 2. **多路径处理** - 如果需添加多个路径,用冒号分隔: ```bash export PATH="$PATH:/path1/bin:/path2/bin" ``` 3. **权限问题** - 如果预编译二进制文件需要管理员权限,建议解压到 `/opt` 或 `/usr/local` 目录。 --- ### **示例:完整操作流程** 假设 LLVM 解压到 `/opt/llvm-15.0.0`: ```bash # 1. 添加路径到 .bashrc(Bash 用户) echo 'export PATH="$PATH:/opt/llvm-15.0.0/bin"' >> ~/.bashrc # 2. 重新加载配置 source ~/.bashrc # 3. 验证 which clang # 输出应显示:/opt/llvm-15.0.0/bin/clang ``` --- ### **常见问题解决** - **问题:修改后命令仍找到** - 检查路径是否拼写错误,或配置文件是否选错(例如用了 `.bashrc` 但实际在用 Zsh)。 - 使用 `echo $SHELL` 确认当前 Shell 类型。 - **问题:环境变量冲突** - 如果系统已安装其他版本的 LLVM,可通过调整路径顺序控制优先级: ```bash # 将新路径放在系统路径前(优先使用新版本) export PATH="/opt/llvm-15.0.0/bin:$PATH" ``` --- $$ \small\text{核心逻辑:通过修改 PATH 变量,将预编译二进制目录加入系统搜索路径,使终端能直接调用其命令。} $$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值