2016-11-23 13 views
1

標準の32ビット整数よりも大きい整数のうち、最小の31ビットを取得する必要があります。C++で任意のサイズの整数の最下位31ビット11

大きな整数の下位31ビットで32ビット整数を取得するか、大きな整数から塗りつぶしされたバイトを取得するだけで十分です。

私はBigIntと.toByteArrayを使用していますが、C++ 11のようなものがありますか(私はC++のnoobです)?

答えて

5

最下位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; 
} 

あなたが作業しているタイプを知っている場合、あなたはもちろん、テンプレートの無神経な人を廃止し、ちょうど

:-)インライン直接マスクすることができ
0

あなたが長い変数に値を持っていると仮定すると、あなたは、この例のようなコードに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; 
} 

そのBの順あなたのシステムによって異なります。

関連する問題