二进制、八进制、十进制、十六进制之间的互相转换_20200711

二进制、八进制、十进制、十六进制之间的互相转换

一、其他进制转十进制

任何进制转换十进制都能按照权值展开计算,二进制的权值为2的n-1次方,n是当前位数,十六进制为16的n-1次方,依此类推,小数部分为2的-n次方,n是小数的位数,展开的时候从左向右,整数部分是从右向左

1010B = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 + 1 * 2^-1 + 0 * 2^-2 = 8 + 2 = 10

当前位数的值乘以当前位数的权值,然后累加起来就是最终的结果

十六进制八进制也是如此,比如

FFH = 15 * 16^1 + 15 * 16^0 = 240 + 15 = 255

如果是小数,小数部分第一位的权值就是2^-1,然后依次类推累加起来

1010.11B = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 + 1 * 2^-1 + 1 * 2^-2 = 8 + 2 + 0.5 + 0.25 = 10.75

二、十进制转其他进制

十进制转二进制,用十进制对二进制取余,除以二进制的基数,余数为转换后的结果,商是下一次被取余的数,直到商比基数小,比如123转二进制

123 / 2 = 61,余1 61 / 2 = 30,余1 30 / 2 = 15, 余0

15 / 2 = 7, 余1 7 / 2 = 3,余1 3 / 2 = 1,余1

剩下一个1就不用除了,直接放到结果里,要将余数倒着拼接起来,这个1就是最高位了

最终结果就是:1111011B

十进制转其他进制也是这样,只不过基数变了而已

如果是负数,那就先当作是正数,再转成二进制,然后再反码补码(在计算机里负数是需要以补码形式存放的)

-10 = 0000 1010B(原码) = 1111 0101B(反码) = 1111 0110B(补码)

//C语言输出:-10
char a = 0b11110110;
printf("%d\n", a);

三、二进制转十六进制

二进制转十六进制

每1位十六进制都对应着4位二进制,只要记住对应关系就可以了

0000B => 0H 0001B => 1H 0010B => 2H 0011B => 3H

0100B => 4H 0101B => 5H 0110B => 6H 0111B => 7H

1000B => 8H 1001B => 9H 1010B => AH 1011B => BH

1100B => CH 1101B => DH 1110B => EH 1111B => FH

1000 1010B

8 A 结果为8A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值