c++二进制转十进制_二进制与十六进制的转换与应用

01d8d660a52f79665fe009266e179c04.png

在说二进制前,先说一下我们常用的十进制:

十进制就是逢10进位,十进制是由0、1、2、3、4、5、6、7、8、9这10个基本数字组成。每次在9之后(也就是10)就进一位,我们可以把9先理解成09,10就是在09的9的钱一位进一位,9回到0就变成了10,同理19的9的前一位1进一位变成2,9回到0,我们再看一下99,我们先把99写成099,099加1最末尾的9需要进位,末尾变回0,末尾的上一位(也就是十位)进一位,十位的9加1,需要向十位的上一位进一位(也就是百位),百位原本是0,进一位变成1,所以,99+1有连续两次进位是100了。在十进制中,10是基数。位值相同,上一位是下一位的10倍,如880,百位的8表示的数值是十位8的10倍。

同理,二进制就是逢2进位,二进制只有0、1两个基本数字,0是00,1是01,2需要进位变成10,3是11,4又要进位,变成100,5是101,6是110,7是111,8又要进位,变成1000。在二进制中,2是基数,相邻两位相差2倍。如110,100是4,10是2,相差2倍。

十六进制是逢16进位,十六进制是由0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f这16个符号表示各位。由于各位数字不够16个,所以增加了a~f 这6个字母表示十六进制10~15的各位。所以,十六进制中a是10,b是11,c是12,d是13,e是14,f是15,10等于16,40=64,100=1*16^2(16的平方)。相邻两位相差16倍。十六进制的作用就是为了二进制书写方便,因为4位二进制(2^4=16)正好是一位16进制,如1111(二进制)=f(十六进制)=15(十进制);1010 1001 = a9 = 169;再举个长点的例子:1011 0101 1110 1111 0010 0011 1000 0111=b5ef2387,可以看出二进制那么长的一串十六进制只要8个字符和数字就可以表示。

二进制怎么表示正数和负数:

二进制规定最高位是1表示正数,最高位是0表示负数。比如:1111是一个负数,0111是一个正数,在计算机中一般最少是8位,比如1111 1111,规定 1111 1111=-1,因为1111 1111 + 1 =0,因为这里只有八位所有最高位丢掉就是1111 1111 + 1= 0000 0000;如果是32位同理规定1111 1111 1111 1111 1111 1111 1111 1111 + 1 = -1;其实计算机是通过补码的方式来进行计算负数的,就是将一个正数取反+1;比如:0111取反是1000,再+1=1000 +1 = 1001 = -7,同样负数取反+1可以变成正数 1001取反0110,0110 + 1 = 0111 = 7。

二进制的<<、>>、>>>移位

<< 是左移位操作,最低位补0,最高位超出部分丢弃,相当将数字乘2的幂次操作。<<1是向左移一位操作,如:0010 1110 <1 为 0101 1100,相当将数字乘2;0010 1110 < 2 后为 1011 1000,相当将数字乘4。

>> 是带符号右移位操作,最低位超出部分丢弃,最高位正数补0,负数补1,相当将数字除2的幂次操作。 >> 1是向右移一位操作,0010 1110 >> 1 后为0001 0111,相当将数字除2;0010 1110 >> 2 后为0000 1011,相当将数字除4;这里要强调一下,二进制的移位操作中如果最低位是1,那么1将会被丢弃。所以5右移一位不是2.5,而是2。

>>>无符号右移,就是表示正数的0和表示负数的1一起向右移动,所以移动过程中负数会变成负数,这个运用不多。

移位符可以将几个小的数拼成一个大数。比如:我们常用的ip就是由4个byte组成192.168.2.11,1100 000. 1010 1000. 0000 0010. 0000 1011,192<<24+168<<16+2<<8+11即可得到字符串192168211。同样将一个大数字也可以拆分成几个小数字。如0xD4AF23,0xD4AF23&&FF = 0x23=0010 0101 = 35,0xD4AF23>>8&&FF=0xAF=1010 1111=175,0xD4AF23>>16&&FF=D4=1101 0100=211。

附0~15二进制、十进制、十六进制对比表

3cafe076b5a4df16bd6b40bc0ff84adb.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值