我需要帮助理解C语言。我刚开始。 我有来自维基百科的这段代码:
unsigned int rotl(unsigned int value, int shift) {
return (value << shift) | (value >> (sizeof(value) * CHAR_BIT - shift));
}
我确实理解比特的旋转意味着什么。我只是不理解这个实现。 为什么我必须在这里执行OR运算符?正确的部分实际上做了什么?
我将值移到右边,表示值的次数(char变量中的位数减去我想要的位数)。为什么我要这样做? 如果我想到一个例子。 我想将未签名的1011(Base 2)2位转移到左侧。 我做了代码所说的:
<00> 0000 0000 0000 0000 0000 0000 0000 1011&lt;&lt; 2 = 0000 0000 0000 0000 0000 0000 0010 11001011&gt;&gt; (4 *(8-2))= 24 = 0000 0000 0000 0000 0000 0000 0000 0000 0000;
执行|:= 0000 0000 0000 0000 0000 0000 0010 1100。
好的,没用。我做错了什么?
谢谢!
答案 0 :(得分:1)
这是一个8位'左移'和'向左旋转'的图形定义:
"Why do I have to perform the OR operator here?"
"And what does the right part actually do?"
对于“向左旋转”操作,左侧“脱落”的位被回收,因为它们被“反复”回到右侧。