c++ - 截断整数的好方法

标签 c++ c++11 integer rounding numeric-limits

我有一个函数,它被赋予一个缓冲区,该缓冲区接受填充到 size_t 长度;然而,填充它的实际调用需要一个 int 作为最大长度。

因此,如果参数不能放入整数中,我希望将其截断为可以放入的最大值;因为无论如何我都无法获得更多数据。

我能做到

int truncatedMaxLen = static_cast<int>(std::min<std::size_t>(maxLength, (std::numeric_limits<int>::max)()));

有什么不那么丑陋的方法吗?

最佳答案

无分支方式是:

int truncatedMaxLen = maxLength;
truncatedMaxLen |= (truncatedMaxLen < maxLength) * std::numeric_limits<int>::max();

对于无符号类型,它更好,因为没有符号位需要处理:

unsigned truncatedMaxLen = maxLength;
truncatedMaxLen |= -(truncatedMaxLen < maxLength);

关于c++ - 截断整数的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255725/

相关文章:

c++ - 具有默认模板参数的参数包

c++ - 这是从容器中获取随机元素的 OK 范围方法吗?

Python 天增量 : Remove time from days output in dataframe and convert column to float

c++ - 使用批处理重新启动 C++ 控制台应用程序不会关闭网络连接

c++ - 为什么这个例子会给出一个段错误?

c++ - 并行计算内存访问瓶颈

无法在 Visual Studio 2012 中编译但在 Visual Studio 2005 中运行良好的 C++ 类型转换运算符代码

vba - VB - 除整数不包括逗号?

c++ - 如何有效地检测 4 个整数变量的对称性?

c++ - 在 C++ 中从二叉搜索树(递归)复制叶子