0

長い N ビットから切り取って int を取得し、それを計算する (そして読み取り可能な int を取得する) 方法は? 私は試します

    int count = sizeof(long) - sizeof(int);
    int int_val =(long_val>> (sizeof(long) - count)); 

しかし、いくつかの恐ろしい計算を取得します...どうすればよいですか-長いNビットから切り取ってintを取得し、それを計算する(そして読み取り可能なintを取得する)にはどうすればよいですか?

4

3 に答える 3

1

以下を試してください (最適化されていません):

#include <limits>
#include <iostream>

using namespace std;

int lowerBits(long in) {
    // use unsigned so that sign bit is not propagated
    // when compiler casts it to a long
    return in & (unsigned) -1;
}

int upperBits(long in) {
    return lowerBits(in >> numeric_limits<unsigned int>::digits);
}

int main(int, char **) {
    cout << hex << lowerBits(0x4321432112341234) << endl;
    cout << hex << upperBits(0x4321432112341234) << endl;
}

gcc を使用した 64 ビット マシンでの出力:

12341234
43214321
于 2012-05-03T00:57:27.817 に答える
0

下位Nビットを取得するには、試してください(long_val & ((1<<(N-1)) - 1))

于 2012-05-03T00:48:58.287 に答える
0

元のコードには 2 つの問題があります。

  1. sizeof演算子はバイト単位で機能します>>演算子はビット単位で機能します。

  2. でシフトしていますがsizeof(long) - sizeof(long) + sizeof(int)、これは偶然にしか正しくありません。

移植可能な方法で下位バイトを取得する場合は、次を使用できます。

unsigned int_val = (unsigned) (long_val & UINT_MAX);
于 2012-05-03T00:54:06.217 に答える