0

如何从长 N 位中切出一个 int 并计算它(并获得可读的 int)?我试试

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

但是得到一些可怕的 cout ......我该怎么办 - 如何从长 N 位中切割以获得一个 int 并 cout 它(并获得可读的 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

原代码有两个问题:

  1. sizeof运算符使用字节单位,但>>运算符使用单位。

  2. 你正在移动sizeof(long) - sizeof(long) + sizeof(int),这可能只是偶然的。

如果您想以可移植的方式获取低位字节,您可以使用:

unsigned int_val = (unsigned) (long_val & UINT_MAX);
于 2012-05-03T00:54:06.217 回答
0

要获得较低的 N 位,请尝试(long_val & ((1<<(N-1)) - 1))

于 2012-05-03T00:48:58.287 回答