🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🐰数据类型的介绍
内置类型:
char 字符型 1字节
short 短整形 2字节
int 整形 4字节
long 长整形 8字节
long long更长整形 8字节
float 单精度浮点型 4字节
double 双精度浮点型 8字节
🐰类型的意义
1.使用这个类型开辟内存空间的大小
2.如何看待内存的视角
🐰数据类型的基本归类
🌸整形家族:
字符存储和表示的时候本质上使用的是ASCII值,ASCII值是整数,字符类型也归类到整形家族
char:
1. unsigned char 2. signed char
C语言并没有规定char就是 unsigned char,取决于编译器(一般char就是 unsigned char)
short:
1. unsigned short [int](int可以省略) 2. signed short [int](int可以省略)
int :
1. unsigned int 2. signed int
long :
1. unsigned long[int](int可以省略) 2. signed long[int](int可以省略)
🌸浮点型家族:
float
double
以后会详细解读浮点型
🌸构造类型:
数组类型
int arr[10]的类型int [10],因此数组类型很多,又称自定义类型
结构体类型
struct 关键字
枚举类型
enum 关键字
联合类型
unio 关键字
指针类型
1. int* pi 2. char* pc 3. float* pf 4. void* pv
*空类型
void表示空类型,通常用于函数的返回类型、函数参数、指针类型
🐰整形在内存中的存储
一个变量的创建是需要开辟一段空间
原码,反码,补码
整数的二进制有三种表示形式:原码,反码,补码
三种表示形式都有符号位和数值位,符号位用0表示“正”,1表示“负”,而数值位正数的原、反、补都相同,
负数的原码,负数的反码就是在原码基础上符号位不变,数值位按位取反,负数反码+1就是补码
int a=20
00000000000000000000000000010100原码
00000000000000000000000000010100反码
00000000000000000000000000010100补码
int b=-20
10000000000000000000000000010100原码
111111111111111111111111111111111111101011反码
111111111111111111111111111111111111101100补码
注:对于整形来说:数据存放在内存中的其实是补码
int a=1;
补码:00000000000000000000000000000001
int b=-1;
原码:10000000000000000000000000000001
反码:1111111111111111111111111111111111111111110
补码:1111111111111111111111111111111111111111111
int c=a+b
c的补码: 1 00000000000000000000000000000000(这里是33位,但是只能存储32位,所以高位1,丢弃)
则c的补码:00000000000000000000000000000000
所以c的原码:00000000000000000000000000000000
🐰大小端
含义:
大端字节序:把一个数据的低字节的数据,存放在高地址处,把高字节的数据,存放在低地址处
小端字节序:把一个数据的低字节的数据,存放在低地址处,把高字节的数据,存放在高地址处
百度2015年工程师测试题
设计一个函数去判断大小端
1. #include<stdio.h> 2. int check_sys() 3. { 4. int a=0x01223302; 5. return *(char*)&a; 6. } 7. int main() 8. { 9. if(check_sys()==2) 10. { 11. printf("小端\n"); 12. } 13. else 14. { 15. printf("大端\n"); 16. } 17. }
🐰关于有无符号字符类型和整形提升的经典题型
1. int main() 2. { 3. char a=-1; 4. -1:原码:10000000000000000000000000000001 5. 反码 :11111111111111111111111111111110 6. 补码 :11111111111111111111111111111111 7. a:发生截断 8. 补码:11111111 9. signed char b=-1; 10. unsigned char c=-1; 11. c:发生截断 12. 补码:11111111(这里的最高位不是符号位) 13. printf(“a=%d b=%d c=%d”,a,b,c); 14. a:发生整形提升 15. 原来的补码:11111111 16. 现在的补码:11111111111111111111111111111111 17. 现在的反码:11111111111111111111111111111110 18. 现在的原码:10000000000000000000000000000001 19. 所以a的值为-1 20. c:发生整形提升 21. 原来的补码:11111111 22. 现在的补码:00000000000000000000000011111111 23. 现在的原码:00000000000000000000000011111111 24. 所以c的值为255 25. 注意:这里的a与b是一样的,如果发生整形提升的时候,如果是有符号数,高位补符号位,如果是无符号数,高位补0(这都是针对补码) 26. }
标题
有符号char类型变量的取值范围:-128(补码10000000)~127
无符号char类型变量的取值范围:0~255
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸