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

image.png

整型变量的输入

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int a;
  6. printf("请输入a的值:");
  7. //不要加“\n”
  8. scanf("%d", &a);
  9. printf("a = %d\n", a); //打印a的值
  10. return 0;
  11. }


其它整形

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类型

image.png

有符号数和无符号数区别

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,是一个无符号的整数

image.png