1.数据类型详细介绍
类型的意义
1.使用这个类型开辟内存空间的大小(大小决定了使用范围)
2.如何看待内存空间的视角
类型的基本归类
整型家族:
char
unsigned char
signed cahr
short
unsigned short [int]
signed short [int]
int
unsigned int
signed int
long
unsigned long [int]
signed long [int]
浮点数家族:
float
double
构造类型(自定义类型):
数组类型(int [10],char [5]等等)
结构体类型 struct
枚举类型 enum
联合类型 union
指针类型:
int* pi;
char* pc;
float* pf;
void* pv;
空类型:
void
3(一般用作函数返回类型,函数参数,指针类型)
2.整型在内存中的储存
原码,反码,补码
对于整数来说:
整数二进制有3种表示形式:原码,反码,补码
正整数:原码,反码,补码相同
负整数:原码:按照数值的数值直接写出的二机制
反码:原码符号位不变,其他位按位取反
补码:反码+1
整数在内存中存储的是补码
大端小端
大端字节序:把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处
小端字节序:把数据的高位字节序的内容存放在高地址处,低位字节序的内容存放在低地址处
3.题目练习
题目1:设计一个小程序判断当前机器的字节序
#include <stdio.h>
int check_sys()
{
int i = 1;
return *((char*)&i);
}
int main()
{
int ret = check_sys();
if (ret == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
题目2:
#include <stdio.h>
int main()
{
char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("%d %d %d", a, b, c);
return 0;
}
ps:C语言标准没有规定char到底是signed char还是unsigned char(一般编译器认为char为signed char),但是C语言标准规定int是signed int,short是signed short。
题目3:
#include <stdio.h>
int main()
{
char a = 128;
printf("%u", a);
return 0;
}
ps:signed char的取值范围是:-128~127(-128的二进制序列为10000000)
题目4:
#include <stdio.h>
int main()
{
int i = -20;
//10000000000000000000000000010100
//11111111111111111111111111101011
//11111111111111111111111111101100
unsigned int j = 10;
//00000000000000000000000000001010
printf("%d", i + j);
//11111111111111111111111111110110
//11111111111111111111111111110101
//10000000000000000000000000001010
return 0;
}
题目5:
#include <stdio.h>
int main()
{
unsigned int i ;
for (i = 9; i >= 0; i--)
{
printf("%u\n", i);
}
return 0;
}
题目6:
#include <stdio.h>
#include <string.h>
int main()
{
char a[1000];
int i;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
//11111111
//11111110
//...
//10000000
//01111111
//...
//00000000
//11111111
}
//-1 -2 -3 ... -127 -128 127 126 125 ... 3 2 1 0 -1 -2 -3 ...
printf("%d\n", strlen(a));//找到\0 -> 0
return 0;
}
题目7:
#include <stdio.h>
unsigned char i = 0;
int main()
{
for (i = 0; i <= 255; i++)
{
printf("hello world\n");
}
return 0;
}
ps:unsigned char的取值范围是:0~255