进制转换,数据存储
十转二
- 正数,直接求二进制码即可
- 负数,先求正整数的二进制,再取反+1
- 0的二进制全是0
二转十
- 正数,普通方法计算
- 负数,即最高位是1,将所有位取反,末尾+1,就是该负数的绝对值
- 如果全是0,对应的十进制就是0
4个字节的int类型变量存储最大整数用十六进制表示:7FFF FFFF (2,147,483,647)
转义字符
八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是 ‘\177’;//有符号
unsigned char a = ‘\377’; //无符号最大377 1111 1111
十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是 ‘\7f’。//有符号
unsigned char a = ‘\xff’ //无符号最大ff 1111 1111 十进制 255
\x要写在单引号里作为字符型字面量或者写在双引号里作为字符串字面量的一部分。
char a = '\x30';
char b[3] = "\x30\x31";
0x是整数型字面量。
int i = 0x0300;
long j = -0x03000000L;
unsigned long = 0x04000000UL;
数据输出,占位符
未完全总结,以下是比较容易混淆的点
(1)在C语言中使用格式说明符%d表示输出十进制,%o表示输出八进制,%x或%X表示输出十六进制。
(2)如果要带有前缀的输出八进制或十六进制,需要在格式说明符中加#。
%-08ld,这里的0不起作用,负号-的作用是将整数左对齐输出,后面会将08看成一个整数,如果不足8位,后面的会用空格补充
%08ld,这里的0起作用,将整数右对齐输出,共输出8位(含负号),如果不足8位,左面用0补充
%04x 以16进制输出,指定输出长度4位,左边不够用0补而不是空白符
如本例:
y = -43456
%-08ld的输出结果是:-43456 后面在跟两个空格
%08ld的输出结果是:-0043456
指数的格式输出
float i=3.5;
printf("%e\n",i); //3.500000e+00 默认占12位
printf("%.4e\n", i); //3.5000e+00 .4代表保留4位小数
printf("%11.4e\n", i); // 3.5000e+00 11.4 总长度为11,保留4位小数,不包括小数点