深入理解C语言中的算术类型
1. 整数类型相关要点
1.1 整数溢出问题
在某些系统中, abs 函数可能会返回错误值,因为 -INT_MIN 无法用有符号整数表示,其结果是由实现定义的。此外, ABS 和 ABSM 类函数宏会多次计算其参数,当参数改变程序状态时可能会产生意外结果,这被称为副作用。而函数调用对每个参数仅计算一次。无符号整数有明确的回绕行为,有符号整数溢出或其可能性应始终被视为缺陷。
1.2 位精确整数类型
位精确整数类型允许指定整数的宽度,例如 _BitInt(32) 是有符号32位整数, unsigned _BitInt(32) 是无符号32位整数。其宽度可达 BITINT_MAXWIDTH 。位精确整数类型在许多应用领域很有用,比如:
- 密码学对称加密算法(如高级加密标准AES)中使用256位整数值。
- 计算安全哈希算法(SHA) - 256哈希值。
- 表示24位颜色空间。
- 描述网络或串行协议的布局。
在现场可编程门阵列(FPGA)编程中,使用普通整数类型对于小范围值且未使用全位宽的情况是极其浪费的,会导致严重的性能和空间问题。而FPGA可以支持宽整数,提供任意精度。在C23之前,程序员必须选择下一个更大尺寸的整数数据类型并手动执行掩码和移位操作,但这容易出错,因为整数宽度是由实现定义的。
有符号位精确整数类型表示为 _B
超级会员免费看
订阅专栏 解锁全文
216

被折叠的 条评论
为什么被折叠?



