gpt4 book ai didi

c++ - 实现安全左移

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:57 25 4
gpt4 key购买 nike

我想实现一个左移函数,它会在溢出时触发失败。

这是我的代码:

uint32_t safe_shl(uint32_t x, uint8_t y) {
uint32_t z = x << y;
assert((z >> y) == x);
return z;
}

请假设我的 assert 函数在我的系统中记录了一个错误。

我想确保我的方法是防弹的(即,在每次错误输入时失败,并且只在错误输入时失败)。

而且我还想问一下您是否知道更有效的实现方式(假设它确实是防弹的)。

最佳答案

如果x << y未定义,所有赌注均无效。
唯一安全的方法是在尝试之前检查它是否有效。

uint32_t safe_shl(uint32_t x, uint8_t y) {
assert (y < 32);
if (y < 32)
{
uint32_t z = x << y;
assert((z >> y) == x);
return z;
}
return 0;
}

请注意,您需要条件 - 无条件移位让编译器假定 y < 32是真的。

关于c++ - 实现安全左移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com