位运算符从来都不是我的强项。我想知道在使用位移时何时需要显式强制转换。
例如,只要是无符号整数类型,例如、等,就i&1 == i%2
保证为真?我认为问题是in是否被隐式转换为 width 类型。i
char
unsigned
uint64_t
1
i&1
sizeof(i)
作为第二个示例,如果我执行 a i = 1<<myshift
,我是否需要首先将 显式1
转换为足够宽以存储移位结果的数据类型,例如:i = (uint64_t)1<<myshift
?
第二个示例中的类型是否myshift
无关紧要,只要它是无符号的?
我认为这些问题的答案是肯定的,肯定的,肯定的。特别是第二个例子可以快速检查。但是有人对这些东西有很好的参考吗?来自 C 标准的链接/引用将非常有帮助。