Linux & 标准C语言学习 <DAY8_1>
一、进制转换
1、为什么要使用二进制、八进制、十六进制
因为目前的CPU只能识别高低两种电平,只能对二进制数据进行计算
二进制虽然能够直接被计算机识别,但是不方便人去书写和记录,因此就把二进制数据转换成八进制,方便记录到文档中
随着CPU的位数的不断增加,已经到目前的64位,所以八进制不再能够满足需求,因此发展出现在的十六进制
2、十进制转其它进制:求余法、求权法
3、其它进制转十进制:每位乘权位再求和
4、二进制转八进制:
从低位起,每三个二进制位对应一个八进制位
二进制:10 101 110 111 100
八进制:2 5 6 7 4
5、二进制转十六进制
从低位起,每四个二进制位对应一个十六进制位
二进制: 10 1011 1011 1100
十六进制:2 B B C
6、不同进制在程序中的显示
C代码中,以0开头的数据是八进制数据,以0x/0X开头的是十六进制数据
进制数据:
%x 让数据以十六进制显示
%o 让数据以八进制显示
%#x %#o 显示出数据对应的进制前缀
7、原码、反码、补码
原码:数据的二进制
反码:
正数的反码就是原码
负数的反码:符号位不变,其它位按位求反
补码:
正数的补码就是原码
负数的补码:反码+1
8、补码如何转成数据:
先确定是有符号还是无符号
1、无符号或最高位为0:补码直接转成十进制
2、有符号且最高位为1:
a、补码-1,得到反码
b、符号位不变,其余位按位求反,得到原码
c、原码转十进制数
二、位运算符
& 按位相与
| 按位相或
~ 按位求反
^ 按位异或
<< 按位左移n位,左边超出的丢弃,右边补0
>> 按位右移n位,右边超出的丢弃,左边补符号位(正0负1)
注意:只要式子中出现了位运算符,必须转换成*二进制补码再进行运算