gpt4 book ai didi

c - 没有进位的变量左按位旋转?

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:42 25 4
gpt4 key购买 nike

让我们的任务是对变量 a 进行左位旋转在 C++ 中没有进位。我认为,使用内联汇编来执行此例程会好得多,不是吗?

例如,如果我们有 a == 100 == 0b<a bunch of zeros>1100100 , a LR 1应该提供0b1001001 == 73 (即不是 0b11001000 == 200 )。

因此,问题是:应如何重写下面的代码以适应上面的任务?

#include <stdio.h>

int main()
{
long long a = 0;

scanf("%ld", &a);

// Here the left-shifting should be replaced with left-rotating
printf("%ld\n", a << 1);

return 0;
}

最佳答案

Shift-with-carry 在高级语言(甚至 C)中是没有意义的,因为除了更多的内联汇编之外,没有办法从这些语言中读取进位标志(以前的高位)。

另一方面,如果您将高位存储到另一个变量(并且还执行移位操作),编译器可能会生成一个带进位的移位,然后是加进位或移动进位以将其到达那里。编译器还相当擅长将两条指令组合成乘加融合指令。


查看您修改后的问题,您尝试执行的操作与普通处理器上可用的任何带进位移位指令完全无关。由于你想移动一位然后清除最高有效位,你可能会发现 bsr 指令很有用,许多编译器都有 intrinsic functions使您可以从 C 代码中访问此指令。

关于c - 没有进位的变量左按位旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5587309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com