我需要知道一个整数是否长32位(我想知道它是否正好是32位长(8个十六进制字符)。如何在C++中实现呢?我应该用十六进制表示形式还是无符号形式做到这一点?诠释一个?

我的代码如下:

mistream.open("myfile.txt");

if(mistream)
{
    for(int i=0; i<longArray; i++)
    {
        mistream >> hex >> datos[i];
    }
}

mistream.close();

其中mistream是ifstream类型,而datos是一个无符号的int数组

谢谢

最佳答案

std::numeric_limits<unsigned>::digits

是一个静态整数常量(在C++ 11中为constexpr),给出位数(由于unsigned存储在基数2中,因此它给出了二进制数字)。

您需要使用#include <limits>来获取此代码,并且您会注意到here给出的值与托马斯的答案相同(同时也可以推广为其他原始类型)

作为引用(在我回答后您改变了问题),给定程序中每个给定类型的整数(例如unsigned)的大小都完全相同。

您现在要问的不是整数的大小(以位为单位),因为它永远不变,而是是否设置了最高位。您可以使用以下方法进行测试
bool isTopBitSet(uint32_t v) {
  return v & 0x80000000u;
}

(如果要泛化为T{1} << (std::numeric_limits<T>::digits-1)以外的无符号T,则将无符号的十六进制文字替换为uint32_t之类的东西)。

10-04 10:28