相关疑难解决方法(0)

C++中循环移位(旋转)操作的最佳实践

左右移位运算符(<<和>>)已在C++中可用.但是,我无法找到如何执行循环移位或旋转操作.

如何执行"向左旋转"和"向右旋转"等操作?

在这里向右旋转两次

Initial --> 1000 0011 0100 0010
Run Code Online (Sandbox Code Playgroud)

应该导致:

Final   --> 1010 0000 1101 0000
Run Code Online (Sandbox Code Playgroud)

一个例子会有所帮助.

(编者注:如果旋转计数为零,许多常见的表达方式在C中旋转会受到未定义的行为的影响,或者编译为不止一个旋转机器指令.这个问题的答案应记录最佳实践.)

c c++ bit-manipulation c++-faq rotation

84
推荐指数
9
解决办法
10万
查看次数

如何在C中执行旋转移位

我有一个问题如下所述:如何在没有嵌入式装配的情况下在C中执行旋转移位.更具体一点,如何旋转32位移位int.

我现在在类型的帮助下解决这个问题long long int,但我觉得它有点难看,想知道是否有更优雅的方法.

亲切的问候.

c assembly

9
推荐指数
1
解决办法
8341
查看次数

Force Clang在常数值上"尽早执行数学"

这与如何通过内联函数强制const传播有关Clang有一个集成的汇编程序; 它不使用系统的汇编程序(通常是GNU AS(GAS)).Non-Clang提前完成了数学运算,一切都"正常".

我说"早",因为@nm反对将其描述为"由预处理器执行的数学".但是这个想法是在编译时知道值,并且应该提前评估它,就像预处理器评估a时一样#if (X % 32 == 0).

下面,Clang 3.6抱怨违反约束.看起来这个常数并没有在整个过程中传播:

$ export CXX=/usr/local/bin/clang++
$ $CXX --version
clang version 3.6.0 (tags/RELEASE_360/final)
Target: x86_64-apple-darwin12.6.0
...
$ make
/usr/local/bin/clang++ -DNDEBUG -g2 -O3 -Wall -fPIC -arch i386 -arch x86_64 -pipe -Wno-tautological-compare -c integer.cpp
In file included from integer.cpp:8:
In file included from ./integer.h:7:
In file included from ./secblock.h:7:
./misc.h:941:44: error: constraint 'I' expects an integer constant expression
        __asm__ ("rolb %1, %0" : "+mq" (x) : "I" ((unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ llvm clang constexpr

6
推荐指数
1
解决办法
534
查看次数

标签 统计

c ×2

c++ ×2

assembly ×1

bit-manipulation ×1

c++-faq ×1

clang ×1

constexpr ×1

llvm ×1

rotation ×1