在符合C99的C中,假设没有预处理器宏定义,这是设置无符号整数的最大值的更便携方式:
unsigned x = -1;
Run Code Online (Sandbox Code Playgroud)
要么
unsigned y = ~0;
Run Code Online (Sandbox Code Playgroud)
我记得几年前我遇到了一个线程,声称将unsigned int设置-1
为更加便携,因为在隐藏的系统上~0
有某种陷阱表示 ; 我不再觉得这是真的.
我知道在C99标准(即模数值等)中很好地定义了将无效值设置为无符号变量的行为,但是反转怎么样0
呢?
此外,如果两个操作都是同等可移植的,并且假设没有编译器优化,哪个操作在时钟周期方面会更有效?
unsigned x = UINT_MAX;
<limits.h>
根据定义,工作(包括之后)UINT_MAX
.
unsigned x = -1;
通过定义操作如何使用无符号整数(UINT_MAX+1
添加或减去以使结果可表示,因此-1
变为-1+UINT_MAX+1
等于UINT_MAX
).
unsigned x = ~0;
不能保证工作,因为它~
被定义为对整数位的操作,而不是对数值的操作,但C标准没有完全指定有符号整数的位.
unsigned x = ~0u;
工作,因为0u
是无符号整数,其值位由C标准完全指定.
归档时间: |
|
查看次数: |
574 次 |
最近记录: |