c/c++语言开发共享动态左移或右移

我有一个非常简单的问题。 有没有办法动态地向左或向右移位,例如取决于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

      (0)
      上一篇 2020年12月10日
      下一篇 2020年12月10日

      精彩推荐