一.数据类型的基本归类
整型家族:
char
(字符是以ASCII码来存储,ASCII码值是整数,则char也是整型)
unsigned char
signed char
short
unsigned short
[
int
]
(int可省略)
signed short
[
int
]
int
unsigned int
signed int
long
unsigned long
[
int
]
signed long
[
int
]
不加前缀的 int long[int] short[int] 默认是signed类型,只有 char 是unsigned还是signed取决于编译器的实现。常见的编译器下是:char 就是 signed char
浮点数家族:
float
double
构造类型(自定义类型):
>
数组类型
>
结构体类型
struct
>
枚举类型
enum
>
联合类型
union
指针类型:
int *
pi
;
char *
pc
;
float*
pf
;
void*
pv
;
空类型:
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。
二.整型在内存中的存储
原码、反码、补码
原码:直接将二进制按照正负数的形式翻译成二进制就可以。
反码:将原码的符号位不变,其他位依次按位取反就可以得到了。
补码: 反码+1就得到补码。
对于整型来说:数据存放在内存中的是补码
#include <stdio.h>
int main()
{
//负数补码按位取反,再加1,就变回原码
int i = -15;
//10000000 00000000 00000000 00001111原码
//11111111 11111111 11111111 11110000反码
//11111111 11111111 11111111 11110001补码
int a = 15;
//00000000 00000000 00000000 00001111原码
//00000000 00000000 00000000 00001111反码
//00000000 00000000 00000000 00001111补码
return 0;
}
****正数的原码,反码,补码都相同
将负数的补码转化为原码,可以将其补码按位取反,再加1,就可以变为原码。
大小端存储
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址
中;(高位低存)
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地
址中。(高位高存)
用一道题来加深理解:
请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。
#include <stdio.h>
int check()
{
int j = 1;
//0x 00 00 00 01 如果1存在低位,则为小端
//char* p = (char*)&j;
//if (1 == *p)
//{
// return 1;
//}
//else
// return 0;
//下面是简版
// p = (char*)&j -> *p = *(char*)&j
return *(char*)&j;//char*指针访问权限为第一位地址,第一位地址为低位,查看低位在内存中为合数来判断大小端存储
}
int main()
{
int i = check();//i返回1,输出小端 返回其他是大端
if (1 == i)
{
printf("小端\n");
}
else
printf("大端\n");
return 0;
}