1、常量
1.1、常量
常量是在程序运行中值不能内改变(常数)。
整型:12 55
实型:21.5
字符型常量: ‘A’
1.2、常量不同进制表示
常量数据在计算机中除了用 十进制 表示,还可以用 二进制、八进制、十六进制表示。
十进制数据:每一位上的数字0 ~ 9 没有前缀 默认数据表示形式
二进制数据:每一位上的数字0 ~ 1, 前缀0b 0B 0b01100001
八进制:了解 每一位上0 ~ 7 前缀0 0141
十六进制:数值表示或者地址 每一位上的 0 ~ 9 a b c d e f 前缀0x 0X 0x61
举例:
int a = 0141;
int b = 0x61;
int c = 0b01100001;
printf("%d %d %d\n",a,b,c); // %d是十进制的格式控制符 其他进制可以转成十进制
1.3、进制格式控制符
short int long long long
十进制格式控制符 %hd %d %ld %lld
八进制的格式控制符 %ho %o %lo %llo
十六进制的格式控制符 %hx %x %lx %llx
二进制没有格式控制符
%#x --- 显示前缀
例子:
int a = 97;
printf("%#d %#o %#x",a,a,a);
不同进制之间有一定的转换关系
1.4、进制之间的转换规则
a、十进制转其他进制
b、其他进制转十进制
c、十进制快速转二进制
d、二进制、八进制、十六进制之间的转换
a、十进制转其他进制 97 --> 0x61 0141 0b01100001
除以 进制数 得到余数 ,直到商为0,将余数逆序排列
b、其他进制转十进制
相应位上的数字*权重,相加
先了解权重
十进制权重: 3 4 5 6
1000 100 10 1
10^3 10^2 10^1 10^0
八进制权重: 0 1 4 1
8^2 8^1 8^0
十六进制权重: 0x 6 1
16^1 16^0
二进制权重: 0b0 1 1 0 0 0 0 1
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
规则:
相应位上的数字*权重,相加
0141 = 1*8^2 + 4*8^1 + 1*8^0 = 64+32+1 == 97
例题:实现下面数据进制之间的转换
计算 255的二进制 八进制 16进制 0b11111111 0377 0xff
计算0x101的十进制 257
计算0171的十进制 121
计算0b10110001的十进制 177
c、十进制快速转二进制
加法:靠近小的权重, > 小的权重
31 --- 32 16 8 4 2 1
√ √ √ √ √
1 1 1 1 1
51 --- 64 32 16 8 4 2 1
√ √ √ √
1 1 0 0 1 1
减法:数值比较靠近大的权重, < 大的权重
31 --- 32 16 8 4 2 1
1 0 0 0 0 0
0 1 1 1 1 1
278:
512 256 128 64 32 16 8 4 2 1
√ √ √ √
1 0 0 0 1 0 1 1 0
500:
512 256 128 64 32 16 8 4 2 1
0 1 1 1 1 1 1 1 1 1 --- 511
0 1 1 1 1 1 0 1 0 0 --- 500
常用的0~16必须会
0 --- 0000
1 --- 0001
2 --- 0010
3 --- 0011
4 --- 0100
5 --- 0101
6 --- 0110
7 --- 0111
8 --- 1000
9 --- 1001
10 --- 1010
11 --- 1011
12 --- 1100
13 --- 1101
14 --- 1110
15 --- 1111
d、二进制、八进制、十六进制之间的转换
3位二进制 == 1位八进制 (4 2 1)
4位二进制 == 1位十六进制 (8 4 2 1)
十六进制和二进制转换
0xaf6 === 0b101011110110
0b0000100101001010 == 0x094a
八进制和二进制进行转换
0345 === 0b011100101
0b000 000 100 101 001 010 === 0004512