我有一个非常简单的问题。 有没有办法动态地向左或向右移位,例如取决于int的符号。
signed int n = 3; signed int m = -2; int number1 = 8; int number2 = 8; //number1 shift n; //number2 shift m;
在这种情况下,我想将number1 3位向左移位,number2 2位向右移位。 有没有办法没有if else
?
是?:
算作if-else
?
int x = (n > 0) ? (number1 << n) : (number1 >> (-n)); int y = (m > 0) ? (number2 << n) : (number2 >> (-m));
对于32位:
x =(((long long)x)<< 32)>>(32-n)
#include typedef unsigned (*fx_t)(unsigned, int); unsigned shiftleft(unsigned val, int bits) { return val << bits; } unsigned shiftright(unsigned val, int bits) { return val >> (-bits); } unsigned shift(unsigned val, int bits) { static fx_t sshift[2] = {shiftright, shiftleft}; return sshift[bits >= 0](val, bits); } int main(void) { signed int n = 3; signed int m = -2; unsigned number1 = 8; unsigned number2 = 8; printf("%un", shift(number1, n)); printf("%un", shift(number2, m)); return 0; }
您可以在ideone上“查看正在运行的代码”: http ://ideone.com/F2vAB
不,你需要一个有条件的。
如果在右侧使用负值,则按位移位运算符具有未定义的行为。
如果要移位的位数的值为负,则结果是不确定的。 但是,您可以试验您的编译器,可能是您的编译器将向相反方向移动。 当然你可以使用?:
,但这只是表达if-else的另一种方式。
以上就是c/c++开发分享动态左移或右移相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522502.html