首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ -以整数位为单位获取大小

问C++ -以整数位为单位获取大小
EN

Stack Overflow用户
提问于 2015-03-27 01:41:25
回答 6查看 23.2K关注 0票数 11

我需要知道一个整数的长度是否为32位(我想知道它是否恰好是32位的长度(8个十六进制字符)。我如何在C++中实现这一点?我应该用十六进制表示还是用无符号整型表示?

我的代码如下:

代码语言:javascript
复制
mistream.open("myfile.txt");

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

mistream.close();

其中mistream是ifstream类型,datos是无符号整型数组

谢谢

EN

回答 6

Stack Overflow用户

发布于 2015-03-27 01:58:25

代码语言:javascript
复制
std::numeric_limits<unsigned>::digits

是一个静态整数常量(或C++11中的常量base ),给出位数(因为无符号存储在基数2中,它给出二进制数字)。

你需要对答案进行#include <limits>,你会注意到here给出了与托马斯的答案相同的值(同时也可以推广到其他原始类型)

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

您现在询问的不是整数的位数大小,因为它永远不会变化,而是最高位是否已设置。您可以使用以下命令对此进行简单的测试

代码语言:javascript
复制
bool isTopBitSet(uint32_t v) {
  return v & 0x80000000u;
}

(如果您想推广到uint32_t以外的无符号T,请将无符号十六进制文字替换为类似于T{1} << (std::numeric_limits<T>::digits-1)的内容)。

票数 21
EN

Stack Overflow用户

发布于 2015-03-27 02:02:14

正如@chux在注释中所暗示的那样,您可以组合使用sizeof运算符和CHAR_BIT宏常量。前者告诉您(在编译时)其参数类型的大小(以sizeof(char)和字节的倍数表示)。后者是字节的位数(通常为8位)。

您可以很好地将其封装到函数模板中。

代码语言:javascript
复制
#include <climits>   // CHAR_BIT
#include <cstddef>   // std::size_t
#include <iostream>  // std::cout, std::endl

template <typename T>
constexpr std::size_t
bit_size() noexcept
{
  return sizeof(T) * CHAR_BIT;
}

int
main()
{
  std::cout << bit_size<int>() << std::endl;
  std::cout << bit_size<long>() << std::endl;
}

在我的实现中,它输出32和64。

由于该函数是一个constexpr,因此可以在静态上下文中使用它,例如在static_assert<bit_size<int>() >= 32, "too small");中。

票数 5
EN

Stack Overflow用户

发布于 2015-03-27 01:58:26

试试这个:

代码语言:javascript
复制
#include <climits>

unsigned int bits_per_byte = CHAR_BIT;
unsigned int bits_per_integer = CHAR_BIT * sizeof(int);

标识符CHAR_BIT表示char中的比特数。

sizeof返回整数占用的字符位置数。

将它们相乘得到一个整数的位数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29285287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档