如何从长 N 位中切出一个 int 并计算它(并获得可读的 int)?我试试
int count = sizeof(long) - sizeof(int);
int int_val =(long_val>> (sizeof(long) - count));
但是得到一些可怕的 cout ......我该怎么办 - 如何从长 N 位中切割以获得一个 int 并 cout 它(并获得可读的 int)?
如何从长 N 位中切出一个 int 并计算它(并获得可读的 int)?我试试
int count = sizeof(long) - sizeof(int);
int int_val =(long_val>> (sizeof(long) - count));
但是得到一些可怕的 cout ......我该怎么办 - 如何从长 N 位中切割以获得一个 int 并 cout 它(并获得可读的 int)?
尝试以下(未优化):
#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
原代码有两个问题:
sizeof
运算符使用字节单位,但>>
运算符使用位单位。
你正在移动sizeof(long) - sizeof(long) + sizeof(int)
,这可能只是偶然的。
如果您想以可移植的方式获取低位字节,您可以使用:
unsigned int_val = (unsigned) (long_val & UINT_MAX);
要获得较低的 N 位,请尝试(long_val & ((1<<(N-1)) - 1))