4.1进制
4.1.1进制介绍
- 二进制:0,1 ,满 2 进 1
- 八进制:0 - 7,满 8 进 1,以前缀0表示。
- 十进制: 0 - 9,满 10 进 1
- 十六进制:0 - 9 以及 A - F,满 16 进 1,以前缀0x或ox表示。其中 A - F 分别对应 10 -15
#include<stdio.h>
void main() {
int a = 97;//十进制
int b = 0141;//以0开头,表示八进制
int c = 0x61;//以0x开头,表示十六进制
int d = 0X61;//以ox开头,表示十六进制
printf("a = %d\tb = %d\tc = %d\td = %d", a, b, c, d);
}
4.1.2其他进制转十进制
4.1.2.1二进制转十进制
从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
1011 = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3 = 1+2+0+8=11
4.1.2.2八进制转十进制
从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
0123 = 3 * 8 ^ 0 + 2 * 8 ^ 1 + 1 * 8^2 = 3+16+64=83
4.1.2.3十六进制转十进制
从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
0x34A = 10 * 16 ^ 0 + 4 * 16 ^1 + 3 * 16^2 = 10+64+768=842
4.1.3十进制转其他进制
4.1.3.1十进制转二进制
将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制
56 => 111000
4.1.3.2十进制转八进制
将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制
156 =>234
4.1.3.3十进制转十六进制
将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
356 => 164
4.1.4二进制转八进制和十六进制
4.1.4.1二进制转八进制
从低位开始,将二进制数每三位一组,转成对应的八进制数即可
11010101 => 0325
4.1.4.2二进制转十六进制
低位开始,将二进制数每四位一组,转成对应的十六进制数即可
11010101 => 0xD5
4.1.5八进制和十六进制转二进制
4.1.5.1八进制转二进制
将八进制数每1位,转成对应的一个3位的二进制数即可
0237 => 10011111
4.1.5.2十六进制转二进制
将十六进制数每1位,转成对应的4位的一个二进制数即可
0x23B = 1000111011
B=11=> 1011
4.2原码、反码、补码
- 二进制的最高位是符号位: 0表示正数,1表示负数
- 正数的原码,反码,补码都一样
- 负数的反码=它的原码符号位不变,其它位取反
- 负数的补码=它的反码+1
- 0的反码,补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的
4.3位运算符
运算符 | 描述 |
& | 按位与操作,按二进制位进行“与”操作。 运算规则:0 & 0 = 0 ; 0 & 1 = 0 ; 1 & 0 = 0 ; 1 & 1 =1 |
| | 按位或操作,按二进制位进行“与”操作。 运算规则:0 | 0 = 0 ; 0 | 1 = 1 ; 1 | 0 = 1 ; 1 | 1 =1 |
^ | 异或操作,按二进制位进行“与”操作。 运算规则:0 ^ 0 = 0 ; 0 ^ 1 = 1 ; 1 ^ 0 = 1 ; 1 ^ 1 =0 |
~ | 取反操作,按二进制位进行“与”操作。 运算规则:~1 = 0 ; ~0 = 1 |
<< | 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位 (左边的二进制位丢弃,右边补0)。 |
>> | 二进制右移运算符。将一个数的各二进制位全部右移若干位。 正数左补0,负数左补1,右边丢弃。 |