[英]How to assign min of uint32_t::max and uint64_t in type safe manner?
我想以类型安全的方式分配两个uint64_t数字之差的最小值和uint32_t的最大数值限制。 有办法吗?
uint32_t max32 = std::numeric_limits<uint32_t>::max();
uint64_t a, b;
uint32_t minValue = std::min(max32, b - a);
^^^^^^ (Parameter mismatch warning)
基本上。 如果a和b之间的差异大于uint32_t的最大值,我想使用最大值,否则我想使用差异。 我需要在仅接受uint32_t的API中使用minValue
。
您可以使用:
minValue = static_cast<uint32_t>(
std::min(static_cast<uint64_t>(max32),
a < b ? b - a : a - b));
static_cast
从max32
创建一个64位无符号值,以匹配a
和b
的diff类型。
请注意,当您从较小的数字中减去较大的无符号数字时,结果将回绕-通常为一个非常大的数字。 例如, (uint8_t)2 - (uint8_t)3
将产生255。这就是为什么我使用?
的原因?
/ :
找出执行减法的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.