c++ - 使用 sizeof 获得两个的最大幂

标签 c++ c types sizeof

在 C/C++ 中有没有一种方法可以使用 sizeof 运算符计算特定数据类型可表示的 2 的最大幂?

例如,假设我有一个unsigned short int。它的值可以介于 065535 之间。 因此 unsigned short int 可以包含的两个的最大幂是 32768

我将这个 unsigned short int 传递给一个函数,我有(目前)和如下所示的算法:

if (ushortParam > 32768) {
    ushortParam = 32768; // Bad hardcoded literals
}

但是,将来我可能想更改变量类型以包含更大的 2 的幂。是否有使用 sizeof() 的类型无关公式可以实现以下目的:

if (param > /*Some function...*/sizeof(param) )
{
    param = /*Some function...*/sizeof(param);
}

请注意,该参数永远不需要浮点精度 - 仅整数。

最佳答案

设置该参数大小的变量的最高有效位将为您提供 2 的最高次幂。

1 << (8*sizeof(param)-1)

关于c++ - 使用 sizeof 获得两个的最大幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12987834/

相关文章:

c - 如何在 C 中定位输入文本光标?

c# - 使用对象类型的字符串名称在 C# 中进行类型转换

azure - 适用于 Azure 表存储上的地理数据的 C# 类型

c - C 446 中的多个 if 语句

c++: argv 包含一些空格

c++ - get() 的异常行为(从 C++ 中的文件读取)

c++ - 从字符串中删除非字母字符 C++

c - 如何使用指针算法获取 A[i][j] 的指针地址?

haskell - Haskell 中的矩阵构造函数和方法

c++ - Poco - 设置无限套接字接收超时