【发布时间】:2012-10-27 10:39:37
【问题描述】:
我想这是一个哲学问题。
C 语言具有标准的按位运算集,包括OR、AND、XOR、SHIFT LEFT/RIGHT 和NOT。为什么语言中不包含向左/向右旋转运算符或函数?
这些运算符与其他按位运算符具有相同的复杂性,并且与其他运算符一样,通常需要一条汇编指令。此外,我可以想到旋转运算符的很多用途,可能不少于,例如,xor 运算符 - 所以我觉得它们没有与其他运算符一起包含在 C 中,这听起来有点奇怪。
如果您确实需要在 C 或 C++ 中旋转,there's a separate FAQ question about best-practices for it。对此问题的讨论与此无关。
【问题讨论】:
-
@Cthulhu 我知道这一点,甚至在问题正文中写下了这一点。问题是关于 C
-
因为它被遗忘了? ;-) 我喜欢这些:stackoverflow.com/a/12733007/694576
-
我想这可能是因为您有时不能完全确定 C 中不同数据类型的大小。旋转在 64 位整数中的表现与在 32 位整数中的表现不同位一。 (我知道这也适用于轮班,轮班时会更明显)。
-
@Cthulhu 或者您可以只使用移位和 OR,每个理智的编译器都会检测到该模式,并且与内联 asm 不同,它不会抑制优化。
标签: c bitwise-operators