加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 按位操作以截断数字的最后两位数字

发布时间:2020-12-16 07:00:12 所属栏目:百科 来源:网络整理
导读:我有一个整数n,我想只使用按位运算截断数字的最后两位数. 因此,在常规算术中,它就像n / = 100一样简单.但是如何通过逐位运算来完成? 谢谢, (顺便说一下,这是c) [编辑]:例如,给定数字1234,我想得到12.(截断最后两位数34) [编辑2:]让我重新解释一下这个问题
我有一个整数n,我想只使用按位运算截断数字的最后两位数.

因此,在常规算术中,它就像n / = 100一样简单.但是如何通过逐位运算来完成?

谢谢,

(顺便说一下,这是c)

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

[编辑2:]让我重新解释一下这个问题.我试图理解为什么一个特定的函数应该截断一个数字类型的最后两位数字,当给出一个负输入时. (我没有这个功能的代码)

这是输入集及其相应的输出

-200901 ==> 186113241

-200801 ==> 186113242

-200701 ==> 186113243

-200601 ==> 186113244

-190001 ==> 186113350

-190101 ==> 186113349

-190201 ==> 186113348

-190301 ==> 186113347

解决方法

在这里你想要除以常数:100

继Suraj Chandran在其评论中提供的How can I multiply and divide using only bit shifting and adding? 之后,

您可以将其重新解释为乘以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>>>>>> 7 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上添加了一个例子

我找不到通过按位操作替换添加的方法无法重现您的负值的结果

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读