16进制转10进制 swift_如何轻松实现10进制与2进制互转

心血来潮,突然想写写这两者之间的转换,以做记录所用:

//---------------------10进制转2进制----------------------

1、正整数转二进制

不断的除2,取余数,反写得到的结果就是该数值的2进制

42 转 2进制

42 / 2 = 21 -------0 (低位)

21 / 2 = 10 -------1

10 / 2 = 5 -------0

5 / 2 = 2 -------1

2 / 2 = 1 -------0 (高位)

1 / 2 = 0 -------1

101010 补齐 0010 1010

1个字节是:8位 int类型,4个字节,那么就应该是32位

2、负整数转二进制

先不管符号直接获得二进制,然后取反,再 + 1

42 转 2进制

0010 1010

取反

1101 0101

再 + 1

1101 0110 = -42

3、小数转二进制

整数部分依旧遵循上述转换方法,小数部分不断 * 2 取整就是了(反正不是1就是0)

42.125

42转二进制后是:0010 1010

0.125 转2进制

0.125 x 2 = 0.25 -----0

0.25 x 2 = 0.5 -----0

0.5 x 2 = 1.0 -----1

0.125 就该是0.001

合起来0010 1010.0010 0000 就是42.125

//---------------------2进制转10进制----------------------

4、整数二进制转换为十进制

如何区分一个二进制是正数,还是负数,非常简单,看补齐后的首位是0或者1,0就是整数,1就是负数

101010 先补齐 0010 1010

然后再每位,乘于2^n ,分别相加就可以了,如:

0 * 2^0 = 0

+ 1 * 2^1 = 2

+ 0 * 2^2 = 0

+ 1 * 2^3 = 8

+ 0 * 2^4 = 0

+ 1 * 2^5 = 32

得到42

5、负整数二进制转换为十进制

1101 0110

首位是1,说明这是1个负整数,应该先-1,并且取反,再每位,乘于2^n ,分别相加就可以了,如:

1101 0110

- 0000 0001

= 1101 0101

取反:0010 1010 后分别再乘以2的n次方,最后相加

0 * 2^0 = 0

+ 1 * 2^1 = 2

+ 0 * 2^2 = 0

+ 1 * 2^3 = 8

+ 0 * 2^4 = 0

+ 1 * 2^5 = 32

得到42,再加上符号,为-42

注意:二进制的减法,与十进制的减法一致,不够就去高位借,只不过十进制中,借的1位相当于10,在二进制中,借的1位相当于2

如:

1100 0011

- 0010 1101

= 1001 0110

二进制的加法,也与十进制的加法一致,多了就向前进一位

如:

0000 0111

+ 0000 1110

= 0001 0101

6、小数二进制转十进制

0010 1010.0010 0000 转10进制

小数点之前是:

0 * 2^0 = 0

+ 1 * 2^1 = 2

+ 0 * 2^2 = 0

+ 1 * 2^3 = 8

+ 0 * 2^4 = 0

+ 1 * 2^5 = 32

小数点之后是:

0 * 2^-1 = 0

+ 0 * 2^-2 = 0

+ 1 * 2^-3 = 0.125

所以加起来就是:0.125 合起来就是:42.125

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值