在符合 C99 的 C 中,假设没有定义预处理器宏,这是设置无符号整数最大值的更可移植的方式:
unsigned x = -1;
或者
unsigned y = ~0;
我记得几年前我遇到了一个线程,它声称将unsigned int设置-1
为更便携,因为在晦涩的系统上~0
有某种陷阱表示;不过,我不再确定这是真的。
我知道将负值设置为无符号变量的行为在 C99 标准中得到了很好的定义(即模值等),但是 的反转0
呢?
此外,如果两个操作都具有同等的可移植性,并且假设没有编译器优化,那么在时钟周期方面哪个操作会更有效?