既然要访问内存,那总得知道内存当中的数据时怎么存储的吧?简单来说,内存当中的每一个存储单元都是一个逻辑电路,通过通断来表示二进制的 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,是一个无符号的整数