基数和基数转换

目录

一、定义:

二、各个进制:

1、二进制:

2、八进制:

3、十进制:

4、十六进制:

三、基数转换:

1、各类基数转十进制:

二转十:

 八转十:

十六转十:

2、十进制转各类基数;

 3、二进制转八、十六进制的相互转换:

二转八: 421法

八转二:421法逆推

二转十六:8421法

十六转二:8421的逆推

 4、小数部分二转各个基数:

二转十:

二转八:

二转十六:

 四、总结:


一、定义:

        ✨基数是指一个数制系统中所使用的数码的数目。在大多数常见的数制中,基数是2(二进制)、8(八进制)、10(十进制)和16(十六进制)✨

👉例如:在十进制系统中,基数是10,意味着我们使用0到9这10个数字来表示所有的数值(也是我们生活中经常会用到的)。在二进制系统中,基数是2,只使用0和1。基数的选择影响了数值的表示方式和计算规则。

✨ 不过,在我们使用的电子计算机中所有数据都是ON/OFF信号(即1和0)来表示的,对我们来说容易理解的是十进制,🐸对于计算机来说容易理解的是以2为基数的二进制更容易理解

二、各个进制:

1、二进制:

✨ 用  0   1  表示,当2种数字用完,就要进位👉下图,我用的二进制的相加,中间的式子和我们十进制的数相加类似,当满足2是就向前进一位,也就是所每位最高只能是1

2、八进制:

用 0  1  2  3  4  5  6  7  表示,当这些数字用完了,就要进位👉下图,用八进制表示,相加,大于等于8就要向前进一位

3、十进制:

✨用0 1 2 3 4 5 6 7 8 9 表示,当这些数字用完了,就要进位👉下图,我们平常接触最多的,一看也明白吧!10进1

4、十六进制:

用 0 1 2 3 4 5 6 7 8 9  A B C D E F 表示 ,A-F用小写也一样,没区别,当这些数字用完了就要进位👉当该位上的值大于等于16就要向前进1

 其实无论是以那个基数作为进制,底层的值都是一样的

三、基数转换:

✨不同的基数底层是一样的原理,所以我们可以通过转换,将不同基数间的值转换为同基数

1、各类基数转十进制:

✨一句话:按权展开 

在十进制中,以1998为例子:👉🐸 各个位乘以相对应的位数

这个思路同样能用到其他基数: 这样就能轻轻松松的将这些数字转换为十进制数

二转十:

以101为例子,按权展开

 八转十:

以123为例子,按权展开

十六转十:

 以1FD为例子,按权展开


2、十进制转各类基数;

✨✨口诀:除以相对应的基数取余数,倒叙排列✨✨

先看一个例子:十进制的数十进制

记住上面的口诀就可以了

总之就是这样:

✨10转2就是除2,取余倒序

✨10转8就是除8,取余倒序

✨10转16就是除16,取余倒序

 3、二进制转八、十六进制的相互转换:

二转八: 421法

✨我们将二进制数从右边第一个数,往左走,每3位看成一个组 从左往右为第一组,第二组以此类推 ;通过“421”法进行转换为八进制的第一位、第二位、第三位等等

补充一句:不足3位的前面补0

👉👉看例子就能理解了;101 111的八进制就是57

八转二:421法逆推

对八进制的每一位分开 对每一位 进行除2取余数 转为 二进制 

👉👉👉 还有一种逆推421法  就是取出每位,然后看那一位上的数是421 上那几个位组成

二转十六:8421法

✨和421法类似,这里是从左边往右边开始,取4位为一组,“8421”法十六进制 不足4位前补0

十六转二:8421的逆推

可以对十六进制每一位除以2取余数    不够位数前面得补0

👉 逆推和八转二类似

 4、小数部分二转各个基数:

二转十:

非小数部分,按权展开,小数部分为2得-1 -2 -3……

二转八:

以小数点为分界线,继续使用  421法

二转十六:

以小数点为分界线,继续使用 8421法 

 四、总结:

二转八“421法”

二转十六:“8421法”

任何基数转十进制:按权展开

十进制转任何基数:除以对应基数,取余倒叙排列

八进制、十六进制转二进制:每一位除以2,取余倒叙排列

 希望本章节内容可以让你对于进制转换更加理解

### 位图转换算法 位图(Bitmap)是一种高效的数据结构,用于表示一组布尔值的状态。Redis 中的 Bitmap 是通过字符串键来存储二进制数据的方式实现的。每个字符占用一个字节,而 Redis 提供了 `SETBIT` `GETBIT` 命令操作单个比特位。 #### 实现方式 - **核心概念**:位图的核心在于将大范围的数值映射到较小的固定长度数组中,其中每一位代表某个特定状态。 - **命令支持**:Redis 支持多种与位图相关的命令,如 `BITCOUNT` 统计某范围内设置为 1 的比特数量,以及 `BITOP` 对多个位图执行按位逻辑运算[^1]。 ```python import redis r = redis.Redis() # 设置第 i 位置为 1 def set_bit(key, index): r.setbit(key, index, 1) # 获取第 i 位的值 def get_bit(key, index): return r.getbit(key, index) # 计算指定 key 下所有被置为 1 的 bit 数量 def count_ones(key): return r.bitcount(key) ``` --- ### 基数排序(Radix Sort) 基数排序是一种非比较型整数排序算法,其基本思想是对整数按照从低位到高位逐位进行稳定排序的过程。它的时间复杂度为 O(n * k),其中 n 表示待排序元素的数量,k 表示关键字的最大位数。 #### 实现细节 - **稳定性要求**:由于基数排序依赖于每一轮次序保持不变的特点,因此通常会采用桶排序作为子过程。 - **分步处理**:先依据最低有效位对序列中的数字分类并重新排列;接着逐步向更高有效位扩展直至完成全部排序工作[^2]。 ```python def radix_sort(arr): max_num = max(arr) exp = 1 while max_num // exp > 0: buckets = [[] for _ in range(10)] for num in arr: digit = (num // exp) % 10 buckets[digit].append(num) arr.clear() for bucket in buckets: arr.extend(bucket) exp *= 10 return arr ``` --- ### 应用场景分析 #### 位图的应用场景 - **用户行为追踪**:利用位图记录用户的在线情况或者某些事件的发生频率,比如统计一天内的活跃用户分布状况。 - **权限管理**:对于大规模系统的角色授权机制来说,可以用较少的空间开销维护复杂的访问控制列表(ACL)。例如,给定 N 种资源,则只需分配 log₂(N) 长度即可表达任意组合形式下的许可配置方案[^1]。 #### 基数排序的应用场景 - **大数据预处理阶段**:当面对海量日志文件或其他类型的半结构化输入源时,可借助该方法迅速整理原始资料以便后续深入挖掘潜在规律特征。 - **实时推荐引擎优化路径规划计算任务**:假设目标是在地图服务端寻找最短距离路线连接起点终点之间若干中间节点构成网络拓扑关系的话,那么运用此技术能够显著提升效率减少延迟时间消耗[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值