这里主要讲了C语言的基本数据类型分类、内存占用,并且主要学习了关于整数的计算机内部表达,类型选择等。
1. C语言数据类型:
① 整数
char short int long
② 浮点数
float double
③ 逻辑
bool
④ 指针
⑤ 自定义类型
2. 类型的不同
类型名称:int long double
输入输出的格式化:%d、%f、%ld、%lf
所表达的数的范围:char<short<int<folat<double
所占内存大小:1个字节到16个字节
内存中的表达形式:二进制(补码)、编码
sizeof运算符:
给出某个类型或变量在内存中所占据的字节数
sizeof(int)
sizeof(i)
例1:计算占据内存大小
int main()
{
printf("sizeof(int)=%ld\n",sizeof(int));
printf("sizeof(char)=%ld\n",sizeof(char));
printf("sizeof(short)=%ld\n",sizeof(short));
printf("sizeof(double)=%ld\n",sizeof(double));
printf("sizeof(long)=%ld\n",sizeof(long));
printf("sizeof(float)=%ld\n",sizeof(float));
return 0;
}
可以得到各个数据类型所占字节如下:
3. 整数在计算机内部的表达
计算机内部一切都是二进制
如18-> 00010010
对于负数的表示,我们考虑0表示为00000000,1表示为00000001,要什么和1相加为0呢?我们可以知道11111111+00000001=100000000,所以-1表示为11111111.
这里就是用到了补码,11111111当做二进制为255,当做补码就是-1。
同理对于-a,其补码是2^n-a,n表示这种类型的位数。
4. 数的范围
对于一个字节(8位),可以表达的是:
00000000-11111111
其中
000000000表示0
11111111-10000000当做补码表示-1~-128
000000001-01111111当做纯二进制数表示1~127
例2:数的范围
int main()
{
char c=255;
//11111111
int i=255;
//00000000 00000000 00000000 11111111
printf("c=%d,i=%d\n",c,i);
return 0;
}
得到结果为:
对于char类型,它只有一个字节,所以11111111表示一个负数,而int类型则前面还有很多填充位为0,所以它表示一个正数。
正数范围具体情况如下:
char:1字节:-128 ~ 127
short:2字节:-32768 ~ 32767
int:取决于编译器,表示“ 1个字”
long:4字节
范围计算:-2^n ~ 2^n-1
unsigned的使用:
如果我们要表示纯二进制,而不是补码,就需要用unsigned
其作用是表达的范围少了负数部分,但其正数表达范围扩大了一倍
将代码改为:
unsigned char c=255;
得到结果为
5. 整数的输入输出
只有两种形式:int或long long
%d : int
%u : unsigned
%ld : lobg long
%lu : unsigned long long
8进制与16进制
一个以0开始的数字字面是8进制
一个以0x开头的数字字面是16进制
%o用于8进制;%x用于16进制
6.整数类型的选择
如果没有特别需要,都使用int类型,今天的计算机每次读入1个字,每次计算也是1个字,所以占据内存更小的char和short也许不会更快。
unsigned与否只是在输出的时候会有不同,计算的时候也是一样的,所以没有必要的时候也就不需要使用unsigned了。