为什么要使用二进制、八进制、十六进制:
因为现在的cpu只能识别高低电平,只能对二进制的数据进行计算
二进制数据虽然可以被计算机识别,但是不方便书写、记录,把二进制的数据转换成八进制为了方便把数据记录在文件中
由于cpu的位数不断增加,由早期的8位逐渐增加到现在的64位,因此八进制不再符合需求,所以发展出了16进制
十进制转二进制:
求余法:用数据对不断2求余,然后再拿商对2求余,直到商为0结束,过程中产生的余数的逆序就是该数据的二进制
求权法:数据 - 2^(n-1),如果可以减,则第n位是1,否则是0
1 2 4 8 16 32 64 128(高)
48: 0011 0000
79: 0100 1111
121:0111 1001
93: 0101 1101
二进制转十进制:
数据的每位的2^(n-1),求和
二进制转八进制:
三位二进制位对应一位八进制位
二进制转十六进制:
四位二进制位对应一位十六进制位
注意:在C语言代码中,以0开头的都是八进制数据,以0X开头的是16进制数据
%o 以八进制打印数据
%x 以十六进制打印数据
%#0 %#x 可以让数据以对应的进制格式显示
原码、反码、补码
原码:数据的二进制
反码:
正数的反码就是原码
负数的反码等于原码除符号位外,其他位按位求反
补码: 数据在计算机内存中是以补码形式存储
正数的补码就是原码
负数的补码等于它的反码+1
1、数据直接转成二进制原码
2、除符号位外,按位求反,得到反码
3、反码+1,得到补码
-127
1111 1111 原码
1000 0000 反码
1000 0001 补码
补码转数据:
无符号数据:直接转换成十进制
有符号数据:
判断最高位是0,直接转换成十进制
判断最高位是1:
1、补码-1得到反码
2、符号位不变,按位求反得到原码
3、原码转换成十进制