我需要知道一个整数是否长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
之类的东西)。