Skip to content

Commit

Permalink
docs: 整型
Browse files Browse the repository at this point in the history
  • Loading branch information
tomiaa12 committed Nov 8, 2023
1 parent f97e378 commit a28c390
Showing 1 changed file with 172 additions and 0 deletions.
172 changes: 172 additions & 0 deletions src/docs/进阶/C语言/数据类型/整型.md
@@ -0,0 +1,172 @@
# C 语言 整型 int

## unsigned 无符号定义变量

1. 默认声明的变量是有符号的`signed`,表示可以是正数,可以是负数。
2. 无符号定义时不能是负数,赋值了负数时输出的值不是想要的值。
3. 无符号使用`printf`输出时使用`%u`占位符。

```c
#include <stdio.h>

int main()
{

// 默认声明的变量是有符号的 signed
// signed 表示有符号的,表示可以是正数,可以是负数
int a = -10;
printf("a: %d\n", a);

// 相当于
signed int b = -10;
printf("b: %d\n", b);

// 无符号定义时不能是负数
unsigned int c = -10;
// 使用 %u 输出无符号内容,因为声明的是 unsigned 无符号的变量,赋值了负数时输出的值不是想要的值
printf("c: %u\n", c);

// 使用 %d 没有区别
printf("c: %d\n", c);

return 0;
}
```

## 整型定义

```c
int main()
{
// 输出
int a = 10;

// 10进制输出
printf("%d\n", a);
// 8 进制输出
printf("%o\n", a);
// 16 进制输出
printf("%x\n", a);
printf("%X\n", a);

// 定义
// 定义 8 进制数据
int b = 0123;
// 定义 16 进制数据(字母不区分大小写)
int c = 0x123;

printf("%d\n", b);
printf("%o\n", b);
printf("%x\n", b);

printf("%d\n", c);
printf("%o\n", c);
printf("%x\n", c);

return 0;
}
```

### printf 打印占位符

| 打印格式 | 含义 |
| -------- | --------------------------------------- |
| %d | 输出一个有符号的 10 进制 int 类型 |
| %o | (字母 o) 输出 8 进制的 int 类型 |
| %x | 输出 16 进制的 int 类型,字母以小写输出 |
| %X | 输出 16 进制的 int 类型,字母以大写输出 |
| %u | 输出一个 10 进制的无符号数 |

## 整型输入

使用`scanf`方法输入

在 vs 编辑器中编译会提示`scanf`不安全,要求输入%d,但输入不是数字时会出现异常,解决方法:

1. 在程序第一行添加代码`#define _CRT_SECURE_NO_WARNING`
2. 或添加一行`#prama warning(disable:4996)`

```c
#include <stdio.h>

int main(){

int a = 0;

printf("请输入数字\n", a);

// & 表示取内存地址运算符,运行后控制台将等待输入一个整型
scanf("%d", &a);

printf("你输入的是:%d\n", a);

return 0;
}
```

## short、int、long、long long

### 占用字节

| 数据类型 | 占用空间 |
| ------------------- | -------------------------------------------------------- |
| short(短整型) | 2 字节 |
| int(整型) | 4 字节 |
| long(长整形) | Windows 为 4 字节,Linux 为 4 字节(32 位),8 字节(64 位) |
| long long(长长整形) | 8 字节 |

:::warning 注意

1. 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
2. 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
:::

### printf 打印占位符

| 打印格式 | 含义 |
| -------- | ---------------------------- |
| %hd | 输出 short 类型 |
| %d | 输出 int 类型 |
| %ld | 输出 long 类型 |
| %lld | 输出 long long 类型 |
| %hu | 输出 unsigned short 类型 |
| %u | 输出 unsigned int 类型 |
| %lu | 输出 unsigned long 类型 |
| %llu | 输出 unsigned long long 类型 |


### sizeof 查看数据类型占位大小
```c
int main()
{

// 整型变量
int a = 10;
// 短整型变量
short b = 20;
// 长整型变量
long c = 30;
// 长长整型变量
long long d = 40;

printf("整型变量 %d\n", a);
printf("短整型变量 %hd\n", b);
printf("长整型变量 %ld\n", c);
printf("长长整型变量 %lld\n", d);

// sizeof 计算数据类型在内存中占用的字节(BYTE)大小
// 使用方法 sizeof(数据类型) sizeof(变量) sizeof 变量名
//
unsigned len = sizeof(int);
unsigned len1 = sizeof(short);
unsigned len2 = sizeof(c);
unsigned len3 = sizeof d;

printf("整型占的字节大小:%u\n", len); // 4B,由 1B = 8bit 得出 4B = 32bit,32 位二进制的数,32 位为 1 的数换算成 10 进制也就是 int 的最大值为 4294967295
printf("短整型占的字节大小:%u\n", len1);
printf("长整型占的字节大小:%u\n", len2);
printf("长长整型占的字节大小:%u\n", len3);

return 0;
}
```

0 comments on commit a28c390

Please sign in to comment.