繁体   English   中英

如何以类型安全的方式分配uint32_t :: max和uint64_t的最小值?

[英]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_castmax32创建一个64位无符号值,以匹配ab的diff类型。

请注意,当您从较小的数字中减去较大的无符号数字时,结果将回绕-通常为一个非常大的数字。 例如, (uint8_t)2 - (uint8_t)3将产生255。这就是为什么我使用?的原因? / :找出执行减法的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM