【问题标题】:Lowest 31 bits of integer of any size in c++11c++11中任意大小的整数的低31位
【发布时间】:2017-04-06 20:21:39
【问题描述】:

我需要获取某个整数的最低 31 位,它大于标准的 32 位 int。

从大整数的最低 31 位获得一个 32 位 int,或者从大整数中获得一个填充的字节数组就足够了。

在 c# 中我会使用 BigInt 和 .toByteArray - c++11 中是否有类似的东西(我是 c++ 中的菜鸟)?

【问题讨论】:

    标签: c++ c++11 binary decimal


    【解决方案1】:

    屏蔽最低 31 位并返回结果:

    template<typename T>
    T mask31(T x) {
        static_assert(std::is_integral<T>::value, "mask31 is only supported on integers!");
        return x & (T)0x7fffffff;
    }
    

    如果您知道您正在使用的类型,您当然可以取消模板 goop 并直接内联屏蔽 :-)

    【讨论】:

      【解决方案2】:

      假设你有一个长变量中的值,你可以在一个 4 字节数组中获得你想要的 31 位,代码如下:

      #include <stdint.h>
      #include <stdio.h>
      
      int main(){
          long int lvalue = 0x1234567890abcdefL;
          unsigned char byteArray[4];
          *(int32_t *)byteArray = (int32_t)(lvalue & 0x7fffffffL); // 0x10abcdef
          for(int i=0; i<4; i++)
              printf("Byte[%d] = %02X\n", i, byteArray[i]);
          return 0;
      }
      

      当然,字节顺序取决于您的系统。

      【讨论】:

        猜你喜欢
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 2015-11-20
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多