【发布时间】:2019-08-09 16:57:30
【问题描述】:
在 C 中计算需要是 32 位倍数的 8 位数据的填充量的最有效方法是什么?
目前我是这样做的:
pad = (4-size%4)%4;
【问题讨论】:
-
对于 2 的幂,您可以使用
&而不是%:pad= (4 - ( 0x3 & size )) & 0x3 ; -
@woolstar 编译器会生成完全相同的代码,我相信。只是你的可读性较差。
-
-size&3应该是一样的。 -
@JoachimIsaksson 对负数的按位运算是 UB、IIRC
-
@JanDvorak:定义了对整数的按位运算,无论是否为负。 bitwise 结果是完全定义的; 数学结果取决于表示形式,对于有符号整数,表示形式受 C 2011 6.2.6.2 2 的约束,可以是符号和幅度、二进制补码或一个补码之一,可能带有填充位。一般来说,这会产生一个陷阱值,但
&3操作尤其不能产生一个陷阱值,因为它清除了高位。
标签: c bit-manipulation padding