gpt4 book ai didi

c++ - 按位运算截断数字的最后两位

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:14 26 4
gpt4 key购买 nike

我有一个整数 n,我想仅使用按位运算截断该数字的最后两位数。

因此,在常规算术中,它会像 n/= 100 一样简单。但是如何使用按位运算来完成呢?

谢谢,

(顺便说一下,这是在 C++ 中)

[编辑]:例如,给定数字 1234,我想得到 12。 (截断最后两位数 34)

[Edit2:] 让我重新表述一下这个问题。我试图理解为什么一个特定的函数应该截断一些数字的最后两位数字,但在给出负输入时却搞砸了。 (而且我没有这个功能的代码)

这是一组输入及其对应的输出

-200901 ==> 186113241

-200801 ==> 186113242

-200701 ==> 186113243

-200601 ==> 186113244

-190001 ==> 186113350

-190101 ==> 186113349

-190201 ==> 186113348

-190301 ==> 186113347

最佳答案

在这里你想除以一个常数:100

正在关注 How can I multiply and divide using only bit shifting and adding? 这是 Suraj Chandran 在他的评论中给出的,

您可以将其重新解释为乘以 1/100。

在基地 2 中, 1/100 可以近似为 1/2^7 * ( 1/2^0 + 1/2^2 + 1/2^6+ 1/2^7+ 1/2^8+ 1/2^9 + 1/2^11+ 1/2^13+ 1/2^14+ 1/2^15+ 1/2^20+ 1/2^22 + 1/2^26 + 1/2^27 + 1/2^28 1/2^29)

所以你有和近似值 (n >> 0 + n >> 2 + n >> 6 + n >> 7 + n >> 8 + n >> 9 + n >> 11 + n >> 13 + n >> 14 + n >> 15 + n >> 20 + n >> 22 + n >> 26 + n >> 27 + n >> 28 + n >> 29) >> 7

这或多或少是您遗留代码中的内容吗?

我不敢说这总能给你正确的答案,因为我没有仔细检查这里的近似值的影响,而且在某些情况下很可能存在舍入问题。

在java代码中会是

剩余 = (( n>>0 ) + (n >> 2) + (n >> 6) + (n >> 7) + (n >> 8) + (n >> 9) + (n >> 11) + (n >> 13) + (n >> 14) + (n >> 15) + (n >> 20) + (n >> 22) + (n >> 26) + (n >> 27) + (n >> 28) + (n >> 29)) >> 7;

http://ideone.com/8UlD7 上添加了一个示例

我找不到用按位运算替换加法的方法 + 无法用负值重现你的结果

关于c++ - 按位运算截断数字的最后两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822662/

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