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