进制转换
为什么要使用二进制、八进制、十六进制:
因为现在的CPU只能识别高低两种电流,只能对二进制数据进行计算
二进制数据虽然能够直接被CPU识别计算,但是不方便书写、记录,把二进制转换成八进制是为了方便记录在文档
随着CPU的位数不断发展,由早期8位逐渐发展到现在64位,因此八进制也逐渐不能满足需求了,所以才出现了十六进制 421
十进制转二进制:
求余法:用两对数据求余,然后再对商继续求余,直到商为0结束,过程产生的余数就是该数据的二进制(逆序)
求权法数据-2^(n-1)如果可以减,则第n位就是1,否则就是0,减了后继续往后减
二进制转十进制:
每位的^(n-1)求和
10110101 128+32+16+4+1=181
注意:二进制转成八进制、十六进制是为了方便记录二进制数据
二进制转八进制:
三位二进制数据对应一个八进制
二进制:1 001 010 110 011
八进制:1 1 2 6 3
二进制转十六进制:
由于计算机的发展八进制不能满足需要,因此引入十六进制
四位二进制数据对应一个十六进制
二进制: 1 0010 1011 0011
十六进制:1 2 B 3
在c代码中,以0开头的是八进制数据,以0x开头的是十六进制数据
%x 以十六进制显示数据
%o 以八进制显示数据
%#x %#o 显示数据进制前缀
原码、反码、补码:
原码:数据的二进制
反码:正数的反码就是它的原码
负数的反码是它的原码除符号位外,其余按位求反 1000 0000
补码:正数的补码就是它的原码
负数的补码:
1、转换成二进制原码
2、原码符号位不变,按位求得到反码
3、反码+1 得到补码
补码转换成数据:
无符号补码直接转成十进制
有符号最高位是0,说明是正数,也是直接转换成十进制
有符号且最高位是1:
1、补码-1得到反码
2、反码符号位不变,按位求反得要原码
3、原码转换成十进制数据
位运算符: & | ~ ^<<>>
A&B 按位相与
A | B 按位相或
~ A 按位求反
A ^ B 按位异或 相异为1,相同为0
A << n 把A的补码向左移动n位,右边补0,左边的放弃
A >> n 把A的补码向右移n位,左边补符号位,右边的丢弃