C语言二进制相关内容

一进制之间的转化

1.10进制转2进制数字(以数字125为例)

有下往上依次得到的余数就是十进制转化出的二进制

故十进制125转化的二进制为1111101

2.2进制转8进制

8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算。

如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制。

3.2进制转16进制

16进制的数字每⼀位是0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了,⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算

如:2进制的01101011,换成16进制:0x6b,16进制表⽰的时候前⾯加0x

二.求一个数存在内存中二进制中一的个数

方法一:

由于上面所显示的十进制转二进制的方法,有很多人会想到除以二的这种方法

可仔细一想,这个代码存在问题 ,当打负一的时候,结果为零,而理论上来说应该是32,那我们该怎么改进呢?

聪明的你肯定已经想到了,改成无符号整形就可以了

方法二

在前面的操作符里面提到的按位与操作符和右移操作符它们能够联系在一起解决这个问题

方法三

按位与的巧妙运用

举例原因(以15为例)

拓展:这种方法还可以用来判断一个数是否为2的n次方数

三改二进制序列的位数(0改1,1改0)

编写代码将13⼆进制序列的第5位修改为1,然后再改回0

1 13的2进制序列: 00000000000000000000000000001101

2 将第5位置为1后:00000000000000000000000000011101

3 将第5位再置为0:00000000000000000000000000001101

这个可以联想到方法二类似的方法,按位与按位或的运用

这里可以感受到位操作符的使用广泛,这里再引出一道关于位作符的变态面试题(实现2个数的交换)--(不能引入第三变量)补充(一个数异或自己为0,而异或0为自身)

当然,在普通做题的时候,可以引入第三变量,或者使用a+b,a-b的形式(不过容易超出)

谢谢大家的阅读,希望大家能够点赞并收藏,并给出评论指导

  • 43
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值