既然要访问内存,那总得知道内存当中的数据时怎么存储的吧?简单来说,内存当中的每一个存储单元都是一个逻辑电路,通过通断来表示二进制的 0 或者 1,这也就是我们熟知的 1 比特,或者 1bit,不过这个单位太小了,所以用 8 个比特来表示一个更大的单位,叫做字节,也就是 Byte。这个单位的命名也是颇具戏剧性,英文当中 bit 是一小口,Byte 是一大口,懂我意思吧?
这里的比特也通常被称作位,因此我们常说的 32位、64位计算机,其实说的是 CPU 每次最大读取的数据长度,这个也被叫做字长。所以 32 位的 CPU 每次最长可以处理的数据时 4 个字节,64位的则是 8 个字节。
整型变量的定义和输出
| %d | 输出一个有符号的10进制int类型 |
| %o(字母o) | 输出8进制的int类型 |
| %x | 输出16进制的int类型,字母以小写输出 |
| %X | 输出16进制的int类型,字母以大写输出 |
| %u | 输出一个10进制的无符号数 |
整型变量的输入
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int a;printf("请输入a的值:");//不要加“\n”scanf("%d", &a);printf("a = %d\n", a); //打印a的值return 0;}
其它整形
short、int、long、long long
| short(短整型) | 2字节 |
| int(整型) | 4字节 |
| long(长整形) | Windows为4字节,Linux为4字节(32位),8字节(64位) |
| long long(长长整形) | 8字节 |
注意:
- 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
- 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
| 10 | 代表int类型 |
| 10l, 10L | 代表long类型 |
| 10ll, 10LL | 代表long long类型 |
| 10u, 10U | 代表unsigned int类型 |
| 10ul, 10UL | 代表unsigned long类型 |
| 10ull, 10ULL | 代表unsigned long long类型 |
| %hd | 输出short类型 |
| %d | 输出int类型 |
| %ld | 输出long类型 |
| %lld | 输出long long类型 |
| %hu | 输出unsigned short类型 |
| %u | 输出unsigned int类型 |
| %lu | 输出unsigned long类型 |
| %llu | 输出unsigned long long类型 |
有符号数和无符号数区别
1) 有符号数
有符号数是最高位为符号位,0代表正数,1代表负数。
2) 无符号数
无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。
3) 有符号和无符号整型取值范围
| short | 2字节 | -32768 到 32767 (-215 ~ 215-1) |
| int | 4字节 | -2147483648 到 2147483647 (-231 ~ 231-1) |
| long | 4字节 | -2147483648 到 2147483647 (-231 ~ 231-1) |
| unsigned short | 2字节 | 0 到 65535 (0 ~ 216-1) |
| unsigned int | 4字节 | 0 到 4294967295 (0 ~ 232-1) |
| unsigned long | 4字节 | 0 到 4294967295 (0 ~ 232-1) |
sizeof关键字
- sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节
- sizeof的返回值为size_t
- size_t类型在32位操作系统下是unsigned int,是一个无符号的整数

