mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月15日 14:24
This commit is contained in:
parent
09b7eb4fed
commit
9ed9ece69c
@ -822,3 +822,35 @@ int main() {
|
||||
int num = 100000;
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> * ① 上述的代码在 int 类型是 4 个字节的内存空间下是没有什么问题的。
|
||||
> * ② 但是,如果 int 类型是 2 个字节的内存空间,就会出现数据溢出现象,将会出现数据精度丢失甚至数据错误的!!!
|
||||
|
||||
* 那么,如何避免这种情况?
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> * ① 直接将 num 的类型变更为更大的数据类型,如:long 等,在进行程序移植的时候,就避免了数据溢出现象。
|
||||
> * ② 为每个平台选择合适的类型:原平台继续使用 int ,而新的平台使用更大的类型 long 。
|
||||
|
||||
* 如果选择上述的方案 ① ,将会造成内存浪费,因为在 32 位的机器上,使用 int 完全可以装得下,却去使用 long 来进行存储。那么,就只剩下方案 ② 了。
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> * ① 我们在原平台,将 int 类型定义为别名 BigInteger ,如:`typedef int BigInteger`。
|
||||
> * ② 我们在新的平台,将 long 类型定义为别名 BigInteger,如:`typedef long BitInteger`。
|
||||
> * ③ 这样,我们在所有的平台都使用 BitInteger 来存储整数,就可以解决跨平台程序移植的问题。
|
||||
> * ④ 其实,C 语言规范的实现者,也为我们想到了这种问题的解决方案,其提供了`精确宽度类型`就是为了解决 C 程序中整数类型跨平台移植的问题,如下所示:
|
||||
>
|
||||
> | 类型名称 | 含义 |
|
||||
> | :------- | :-------------- |
|
||||
> | int8_t | 8 位有符号整数 |
|
||||
> | int16_t | 16 位有符号整数 |
|
||||
> | int32_t | 32 位有符号整数 |
|
||||
> | int64_t | 64 位有符号整数 |
|
||||
> | uint8_t | 8 位无符号整数 |
|
||||
> | uint16_t | 16 位无符号整数 |
|
||||
> | uint32_t | 32 位无符号整数 |
|
||||
> | uint64_t | 64 位无符号整数 |
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user