c语言 零碎知识点
- Endian 指的是存储字节的顺序。
- 两种常用的字节排序:Little-Endian和Big-Endian
Little-Endian
如果多字节的最低有效字节首先存储在最低的存储器地址处,那么硬件被称为小端。
例子:小端存储0x44332211
地址:---------- MEMORY BYTES ----------
100:00 11 22 33 44 00 00 00 00 00 ...
Big-Endian
如果多字节的最高有效字节首先存储在最低的存储器地址处,那么硬件被称为大端。
例子:大端存储0x44332211
地址:---------- MEMORY BYTES ----------
100:00 44 33 22 11 00 00 00 00 00 ...
多字节和单字节的区别
单字节数据不受Endianness的影响。(类似于大端)
如字符串'abcd',起始字符'a'存储在最低的内存位置。
例子:‘abcd’
地址:---------- MEMORY BYTES ---------- --- ASCII字符---
100:00 61 62 63 64 00 00 00 00 00 ... .abcd ....
代码检测大小端
int checkIsLittleEndian
{
int i = 0x12345678;
char *c = &i;
return ((c[0] == 0x78) && (c[1] == 0x56) && (c[2] == 0x34) && (c[3] == 0x12));
}
几种不常用的打印
-
o:无符号8进制(octal)整数(不输出前缀0)
-
x/X:无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
printf("0x%x 0x%X",123,123);输出0x7b 0x7B
-
e/E:科学计数法,使用指数(Exponent)表示浮点数
printf("%e %E",0.000000123,0.000000123); 输出 1.230000e-07 1.230000E-07
-
p:以16进制形式输出指针
printf("%p","lvlv");输出:0x103e6f45d
基本数据类型在内存中的存储形式
-
整数类型 在内存中以补码的形式存在,对于一个正整数来说,它的补码是它的原码本身;对于一个负数来说,它的补码是它的原码取反加1.
-
浮点类型 在计算机中以二进制的形式存储
例如:12.565 整数部分:1100 小数部分:0.565*2=1.130得小数点后第一位为1,0.13*2=0.26得小数点第二位为0,0.26*2=0.52得第三位为0;0.52*2=1.04得第四位为1,以此类推。
-
字符型 把字符的相对应的ASCII放到存储单元中,而这些ASCII代码值在计算机中以二进制的形式存放的。
网友评论