「学习笔记」进制转换

前言

学习下c语言以及相关的基础,最近会更新很基础的知识

进制

常用的进制分别为2进制、10进制(生活常用)、16进制

进制间的关系表

二进制十进制十六进制
000
111
1022
1133
10044
10155
11066
11177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F
100001610
100011711
11111111255FF

进制间的转换

二进制转十进制

1.简单方法适用于所有位上均为1的情况

公式: result = 2^n -1
    
    说明:result为十进制结果,n为1的个数
    
    读作:2的n次方减1
    
    例:1111有4个1,那么就有 2^4 - 1 = 16 -1 = 15

2.无符号按位加权:适用于无符号情况(c语言中int型默认有符号)

二进制8位数,从右往左从0~7写位权        
    
    公式:result = n1x2^7 + n2x2^6 + n3x2^5 + n4x2^4 + n5x2^3 + n6x2^2 + n7x2^1 + n8x2^0
    
    说明:result为结果,n1~n8分别为二进制数第1到第8位数,2的位权次方
    
    读作: 每个二进制数位与2的位权次方之和
    
    举例:111的前五位均为0,那么乘后也为0,2的0次方为1
    
    1x2^2 + 1x2^1 + 1x2^0 =  4+2+1 = 7

3.有符号按位加权:负数,符号位为1;非负数符号位为0

其中符号位为0(正数)的情况下与上述方法完全相同。
    
    符号位为1的时候(负数),在计算第1位前乘-1
    
    公式:result = -n1x2^7 + n2x2^6 + n3x2^5 + n4x2^4 + n5x2^3 + n6x2^2 + n7x2^1 + n8x2^0
    
    举例:有符号10000000转十进制,首先是有符号并且符号位为1,说明是负数,则有
    
    -1x2^7 + 0x2^6 + 0x2^5 + 0x2^4 + 0x2^3 + 0x2^2 + 0x2^1 + 0x2^0 = -128

十进制转二进制

取余法
  1. 将十进制数进行多次除二,直到商为0,记录每次是否被整除,整除记0,不整除记1
  2. 将记下的数由下至上即可得到二进制数

举例:十进制18,第一次18/2整除记0,第二次9/2不整除记1,第三次4/2四次整除记0,第四次2/2整除记0,最后一次1/2不整除记1,倒序就是10010

2进制转16进制

将2进制数从右往左数,每4个一组,通过查表分别换算成16进制数即可。

16进制转2进制

将16进制每一位当作一个十进制都转成4位长度的二进制,最终组合到一起。当16进制位是A ~ F,转换成10进制,A ~ F就是10 ~ 15。

举个例子:16DB

1转成0001

6转成0110

D对应10进制的13,转成1101

B对应10进制的11,转成1011

组合起来就是 0001 0110 1101 1011

Linux上转换进制

  1. 使用bc命令,需要安装bc
        - 命令:echo "obase=x;ibase=y;z" | bc
        - 说明:其中obase中的x为要转换成的进制用数字表示, ibase的y为当前输入进制数字,z为待转换数
  2. 使用echo $((x#y)) 二进制转换十进制
        - 说明 x为进制数,y为输入数

本文整理自小甲鱼的论坛整理而来,原贴见链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东北小狐狸-Hellxz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值