|
发表于 2022-3-10 21:54:28
|
显示全部楼层
本楼为最佳答案
在第 6 讲数据类型中,整一节课都在讲这个,为什么说没讲过呢?
我重新翻看一下视频,下面内容是视频中涉及到该知识点的讲解:
我们可以为这些基本数据类型加上一些限定符,比如表示长度的 short 和 long。
比如 int 经过限定符修饰之后,可以是 short int,long int,还可以是 long long int,其中的 long long int 是 C99 新增加的。
这里需要说的是,这里 C 语言并没有限制 int 的坑具体要挖多大,short int 或l ong int 的坑又要挖多大。标准只是要求:short int <= int <= long int <= long long int。
这样约定的好处就是使得 C 语言可以永垂不朽,这么说其实一点都不夸张。
我们现在的 CPU 是 64 位为主流,也可以预测到不久的将来会推出 128 位甚至 256 位的 CPU。
但是在 C 语言刚刚发明的时候,那时候 CPU 还是 8 位和 16 位为主。如果那时候就将整型写死为 8 位或 16 位,那么肯定现在我们就不会来学习 C 语言了。
虽然你现在还不了解 8 位和 64 位对于一个程序来说意味着什么,但光听这数字的差距,都觉得 8 为很 LOW 了,对不对?!
那既然没有规定一个坑要挖多大,那我怎么知道这个坑到底有多大?C 语言为此提供了一个特殊的运算符:sizeof 运算符。
- #include <stdio.h>
- int main()
- {
- printf("int = %d\n", sizeof(int));
- printf("short int = %d\n", sizeof(short));
- printf("long int = %d\n", sizeof(long));
- printf("long long int = %d\n", sizeof(long long));
- printf("char = %d\n", sizeof(char));
- printf("_Bool = %d\n", sizeof(_Bool));
- printf("float = %d\n", sizeof(float));
- printf("double = %d\n", sizeof(double));
- printf("long double = %d\n", sizeof(long double));
- return 0;
- }
- [fishc@localhost s1e6]$ gcc test2.c && ./a.out
- int = 4
- short int = 2
- long int = 4
- long long int = 8
- char = 1
- _Bool = 1
- float = 4
- double = 8
- long double = 12
复制代码
还有一对类型限定符是 signed 和 unsigned,它们用于限定 char 类型和任何整型变量的取值范围。
signed 表示该变量是带符号位的,而 unsigned 表示该变量是不带符号位的。
带符号位的变量可以表示负数,而不带符号位的变量只能表示正数,它的存储空间也就相应扩大一倍。
默认所有的整型变量都是 signed 的,也就是带符号位的。
因此加上 signed 和 unsigned 限定符,四种整型就变成了八种:
- [signed] short [int]
- unsigned short [int]
- [signed] int
- unsigned int
- [signed] long [int]
- unsigned long [int]
- [signed] long long [int]
- unsigned long long [int]
|
|