krb*_*686 2 c bit-manipulation rotation
我试图通过仅使用按位运算符在C中实现rotateRight by n函数.
到目前为止,我已经决定使用它了.
y = x >> n
z = x << (32 - n)
g = y | z
Run Code Online (Sandbox Code Playgroud)
所以以价值为例 11010011
如果我试着`rotateRight(5):
y
变 11111110
z
变 01100000
然后g
成为111111110
但是应该是正确的答案 10011110
这几乎可以工作,但问题是当我需要它来执行逻辑移位时右移复制符号位,所以我的一些答案是他们应该是什么的负面.我怎样才能解决这个问题?
注意 我无法使用强制转换或无符号类型
您可以转移无符号值:
y = (int)((unsigned)x >> n);
z = x << (32 - n);
g = y | z;
Run Code Online (Sandbox Code Playgroud)
或者,您可以适当地掩盖:
y = (x >> n) & ~(-1 << (32 - n));
z = x << (32 - n);
g = y | z;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18947 次 |
最近记录: |