gpt4 book ai didi

c++ - 为什么 std::bit_width 为值 0 返回 0,它不应该返回 1 吗?

转载 作者:行者123 更新时间:2023-12-04 04:26:11 35 4
gpt4 key购买 nike

std::bit_width查找表示整数所需的最少位数 x1+floor(log(x))为什么std::bit_width为值 0 返回 0?它不应该返回 1,因为表示 0 所需的位数是 1?
另外,我认为1在公式中是一个偏移量。

最佳答案

bit_width有一段奇怪的历史.
最终被称为 bit_width 的函数开始的生活是 log2 ,作为提案的一部分 adding integer power-of-two functions . log2指定为在传递 0 时生成 UB。
因为这就是对数的工作原理。
但随后,事情发生了变化。函数后来变成了log2p1 , 和 for reasons that are not specified was given a wider contract (C++ 术语中的“宽契约(Contract)”意味着更多的东西被认为是有效的输入)。具体来说,0 是有效输入,并产生 0 值。
这不是对数的工作方式,但无论如何。
随着 C++20 接近标准化,一个 name conflict was discovered (PDF) .名称 log2p1恰好对应于 IEEE-754 算法的名称,但它是一个完全不同的算法。此外,具有类似输入和结果的其他语言中的函数使用类似 bit_length 的名称。 .所以它was renamed to bit_width .
而且由于它不再假装做对数,0 处的行为可以是我们想要的任何东西。
确实,the Python function int.bit_length has the exact same behavior .前导零不被视为位长的一部分,因为值是 0包含所有前导零...

关于c++ - 为什么 std::bit_width 为值 0 返回 0,它不应该返回 1 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67145250/

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