截断整数的好方法
Nice way to truncate an integer
我有一个函数,它被赋予了一个缓冲区,该缓冲区接受填充到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++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 让bool方法返回其他整数
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 将一系列整数放入类的最佳方法是什么?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 有没有更好的方法对C++中的三个整数进行排序?
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- C++:这是使用整数变量作为函数调用指针的正确方法吗
- 计算将整数n分解为4平方和的方法的数量
- 计算机使用什么方法添加无符号整数
- 基于整数向量执行位排列的有效方法?
- 快速方法可以将整数乘以适当的分数,而无需浮点或溢出
- 为大无符号整数分配内存的有效方法
- 在模型中保存整数的方法,与QStyledItemDelegate兼容
- 将整数输入数组的方法比 scanf() 或 cin 更快?
- 如何将枚举传递给方法而不将其作为整数传递
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法