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

进制的理解与转换

二进制(binary)是在数学和数字电路中以2为基数的记数系统,这一系统中,通常用两个不同的符号0和1来表示数值。
基本概念
位(bit):二进制数据中的基本单位,每一位只能是0或1。在计算机科学中,一个位通常被称为一个比特(Binary digit的缩写)。
字节(byte):由8个位组成,是计算机中常用的数据单位。一个字节可以表示256种不同的状态(因为2^8=256)。

二进制的特点
基数为2:二进制的基数是2,这意味着在二进制系统中,每一位的数值只能是0或1。
进位规则:二进制采用“逢二进一”的进位规则,即当某一位的数值达到2时,需要向高位进位,并将该位重置为0。
借位规则:在二进制中,当需要从一个较小的数中减去一个较大的数时,会发生借位。借位规则是“借一当二”,即从高位借1位来当作2使用。

//举例
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

举个例子,将十进制数23转换为二进制数:

23 ÷ 2 = 11 余 1(记录1,这是最低位)
11 ÷ 2 = 5 余 1(记录1,这是次低位)
5 ÷ 2 = 2 余 1(记录1,这是更高位)
2 ÷ 2 = 1 余 0(记录0,这是再高一位)
1 ÷ 2 = 0 余 1(记录1,这是最高位)

所以23就是10111

八进制
八进制(Octal)是一种以8为基数的计数系统,满8近一。

0  ->  00
1  ->  01
2  ->  02
3  ->  03
4  ->  04
5  ->  05
6  ->  06
7  ->  07
8  ->  10
9  ->  11
10 ->  12
11 ->  13
12 ->  14
13 ->  15
14 ->  16
15 ->  17
16 ->  20

16进制
16进制(简写为hex或下标16)是一种数学中常用的数制(记数的方法),它用16个符号来表示数值。这些符号分别是:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中,A到F分别表示10到15。

16进制数的表示形式为:
0x或0X开头(在C、C++、Java等编程语言中常用)
例如:0x1A3F、0XFF1C等

进制的转换

  • 二进制转十进制
    将二进制数的每一位从右到左计算乘以2的相应次方(从右到左,次方从0开始增加),然后将这些乘积相加得到十进制数。
比如我们计算1011:
从二进制数的最右边(即最低位)开始,将每一位上的数字乘以2的次方。
最右边的位(第1位)是1乘以2的0次方
得到1。
接着是(第2位)1乘以2的1次方
得到2。
然后是(第3位)0乘以2的2次方
得到0。
最后是(第4位)1乘以2的3次方
得到8。

1+2+0+8=11
  • 十进制转二进制

十进制转换为二进制可以采用“除2取余法”
整数部分的转换
将十进制的数字一直除2,得到的商和余数,直到商为0时为止。
将每次得到的余数记录下来,按从低位到高位的顺序排列起来。

//将53转成二进制
第一次除法:用51除以2,得到商26和余数1。
第二次除法:用2去除26,得到商13和余数0。
第三次除法:用2去除13,得到商6和余数1。
第四次除法:用2去除6,得到商3和余数0。
第五次除法:用2去除3,得到商1和余数1。
第六次除法:用2去除1,得到商0和余数1。
组合余数:
将所有记录的余数按从低位到高位的顺序排列起来,表示为110101。

小数部分的转换
乘法运算:
用2乘以十进制小数,然后取整数部分。
剩下的小数部分继续乘以2,然后取整数部分。
如此进行,直到小数部分为零为止(如果永远不能为零,则按照要求保留多少位小数)。
记录整数部分:
在整个乘法运算过程中,将每次得到的整数部分记录下来。
注意整数部分的顺序,先得到的整数部分是二进制数的低位有效位,后得到的整数部分是二进制数的高位有效位。
组合结果:
将所有记录的整数部分按从低位到高位的顺序排列起来(小数点不变),并加上小数点,就得到了该十进制小数的二进制表示(如果要求保留有限位小数)。

以十进制数23.625为例:
整数部分23的转换:
23 ÷ 2 = 11 余 1
11 ÷ 2 = 5 余 1
5 ÷ 2 = 2 余 1
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1
将余数按从低位到高位的顺序排列:10011

小数部分0.625的转换:
0.625 × 2 = 1.25(取整数部分1)
0.25 × 2 = 0.5(取整数部分0,注意这里我们只取到小数点后第一位,因为原数只有两位小数)
0.5 × 2 = 1.0(取整数部分1,这里已经足够精确到原数的位数)
将整数部分按从低位到高位的顺序排列(并加上小数点):.101
因此,小数部分0.625的二进制表示为0.101(这里我们只保留了三位小数进行演示,实际上可以根据需要保留更多位)。
组合结果:
将整数部分和小数部分的二进制表示组合起来:10111.101
因此,十进制数23.625的二进制表示为10111.101。

原码反码和补码

原码、反码和补码是计算机中用于表示有符号整数(二进制编码)的三种编码方式。

原码

  • 定义:原码是一种最简单的机器数表示法,最高位为符号位,用以表示数值的正负(通常用 0 表示正数,1 表示负数),其余位表示数值的绝对值。
  • 示例:假设用 8 位二进制来表示整数。
    • 对于正数 +10,其原码是 00001010,最高位 0 表示正数,后面 7 位 0001010 是 10 的二进制表示。
    • 对于负数 -10,其原码是 10001010,最高位 1 表示负数,后面 7 位 0001010 同样是 10 的二进制表示。
  • 优缺点:原码的优点是直观易懂,与真值的转换较为简单;缺点是进行加减运算时规则复杂,需要先判断符号位和数值大小,再进行相应操作。

反码

  • 定义:反码的表示规则根据数的正负有所不同。正数的反码与原码相同;负数的反码是在原码的基础上,符号位不变,其余位按位取反(即 0 变为 1,1 变为 0)。
  • 示例:同样以 8 位二进制为例。
    • 正数 +10 的原码是 00001010,其反码也是 00001010
    • 负数 -10 的原码是 10001010,则其反码是 11110101(符号位 1 不变,其余位取反)。
  • 优缺点:反码在一定程度上简化了计算机的运算,但仍然存在 0 的表示不唯一的问题(有 +0 和 -0 之分),并且在运算时还是需要额外处理。

补码

  • 定义:补码的表示规则同样因数的正负而异。正数的补码与原码、反码相同;负数的补码是在反码的基础上加 1。
  • 示例:还是以 8 位二进制表示。
    • 正数 +10 的原码、反码和补码都是 00001010
    • 负数 -10 的原码是 10001010,反码是 11110101,补码则是 11110110(反码 11110101 加 1)。
  • 优缺点:补码解决了 0 的表示不唯一的问题,并且在计算机中可以将减法运算转化为加法运算,大大简化了计算机的运算器设计,提高了运算效率,因此在计算机系统中得到了广泛应用。

总结

原码直观但运算复杂,反码是过渡形式,而补码则解决了原码和反码存在的问题,使得计算机的运算更加高效和统一。

http://www.dtcms.com/a/58033.html

相关文章:

  • Visual-RFT视觉强化微调:用「试错学习」教会AI看图说话
  • 中性点不接地系统单相接地故障Matlab仿真
  • 工程化与框架系列(25)--低代码平台开发
  • 开放充电点协议(OCPP)技术解析:架构演进与通信机制 - 慧知开源充电桩平台
  • upload-labs文件上传
  • JavaWeb学习——HTTP协议
  • 打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手
  • Jmeter接口测试详解
  • torch 中 model.eval() 和 model.train() 的作用
  • 肿瘤检测新突破:用随机森林分类器助力医学诊断
  • 【JAVA架构师成长之路】【Redis】第18集:Redis实现分布式高并发加减计数器
  • 小程序事件系统 —— 33 事件传参 - data-*自定义数据
  • AI视频生成工具清单(附网址与免费说明)
  • 支持向量机的深度解析:从理论到C++实现
  • 栈概念和结构
  • Linux安装RabbitMQ
  • 01-简单几步!在Windows上用llama.cpp运行DeepSeek-R1模型
  • 计算机毕业设计SpringBoot+Vue.js制造装备物联及生产管理ERP系统(源码+文档+PPT+讲解)
  • FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)
  • 【2024_CUMCM】图论模型
  • SwanLab简明教程:从萌新到高手
  • NO.30十六届蓝桥杯备战|C++输入输出|单组测试用例|多组测试用例|isalpha|逗号表达式(C++)
  • C语言-语法
  • vocabulary is from your listening,other speaking and your thought.
  • 如何借助人工智能AI模型开发一个类似OpenAI Operator的智能体实现电脑自动化操作?
  • 什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
  • 免费AI图片生成工具推荐
  • 005-获取内存占用率
  • C运算符 对比a++、++a、b--、 --b
  • 【数据结构】后序线索二叉树找前驱、后继