long与int字节大小

早期的操作系统是16位系统,
int用二字节表示,范围是-32768~32767;
long用4字节表示,范围是-2147483648~2147483647。


后来发展到32位操作系统,
int 用4字节表示,与long相同。


目前的操作系统已发展到64位操作系统,但因程序编译工艺的不同,两者表现出不同的差别:
32位编译系统:int占四字节,与long相同。
64位编译系统:int占四字节,long占8字节,long数据范围变为:-2^63~2^63-1
    
long=long int    
    
    
                      (short int)    (int)    (long)    (long long)
 8位系统/编译器:
16位系统/编译器:          2            2        4
32位系统/编译器:          2            4        4           8
64位系统/编译器:          2            4        8           8


    
      0--------7f   80--------  ff
正    0--------127  128-------  255
负    0--------127  -128------  -1    

 

在 C/C++ 中,`unsigned long` `int` 是两种不同类型,它们的大小(即所占字节数)**依赖于平台编译器**,但我们可以从标准常见实现角度来分析它们的比较。 --- ### ✅ 1. 类型大小(常见平台下) | 类型 | 32位系统 | 64位系统 | |----------------|----------|----------| | `int` | 4 字节 | 4 字节 | | `unsigned long`| 4 字节 | 8 字节 | - 在 32 位系统中,`unsigned long` `int` 都是 4 字节(32 位)。 - 在 64 位系统中,`unsigned long` 是 8 字节(64 位),而 `int` 仍然是 4 字节。 --- ### ✅ 2. 范围比较 | 类型 | 范围(近似) | |----------------|--------------------------| | `int` | -2,147,483,648 ~ 2,147,483,647 | | `unsigned long`| 0 ~ 18,446,744,073,709,551,615(64位) | - `unsigned long` 的最大值远大于 `int` 的最大值。 - 即使两者大小相同(如都是 4 字节),`unsigned long` 的表示范围也更大。 --- ### ✅ 3. 类型转换规则(隐式转换) 当你比较 `unsigned long` `int` 时,会发生**隐式类型转换**: ```c unsigned long a = 100; int b = -1; if (a > b) { printf("a > b"); } else { printf("a <= b"); } ``` **输出:** `a <= b` #### 原因: - `int` 被隐式转换为 `unsigned long`。 - `-1` 转换为 `unsigned long` 后变成一个非常大的正数(例如 4294967295)。 - 所以 `a > b` 实际变成 `100 > 4294967295`,结果为假。 --- ### ✅ 4. 如何安全比较? 建议显式转换或使用统一类型: ```c if (a > (unsigned long)b) { ... } ``` 或使用 `int64_t`、`uint64_t` 等固定大小类型: ```c #include <stdint.h> if ((int64_t)a > (int64_t)b) { ... } ``` --- ### ✅ 5. 总结 | 比较维度 | 结论 | |----------------|------| | **大小比较** | 取决于平台(32/64位) | | **范围比较** | `unsigned long` > `int` | | **隐式转换问题** | 存在风险,可能导致错误判断 | | **建议做法** | 显式转换或使用固定大小类型(如 `int64_t`) | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值