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

如何获得/和%运算符的正确值?

发布时间:2020-12-16 09:45:21 所属栏目:百科 来源:网络整理
导读:我想做以下事情: 我使用变量int a来保持控制台的输入,然后我执行以下操作: int b = a / 16; 当a是64或32时,我得到4或2.但是如果a是63,我希望得到4,但是我得到3.在C中是否有任何方法可以获得舍入值? 编辑.更多细节: rang 1 to 16 should get 1,rang 17 to
我想做以下事情:

我使用变量int a来保持控制台的输入,然后我执行以下操作:

int b = a / 16;

当a是64或32时,我得到4或2.但是如果a是63,我希望得到4,但是我得到3.在C中是否有任何方法可以获得舍入值?

编辑.更多细节:

rang 1 to 16 should get 1,rang 17 to 32 should get 2,rang 33 to 48 should get 3,rang 49 to 64 should get 4

解决方法

当您使用除法运算符/有两个int参数时,它将返回一个表示截断结果的int.

您可以在不使用浮点数的情况下获得舍入除法,如下所示:

int a;
int den = 16;
int b = (a + den - 1) / den;

哪个会给你你所期望的:

a ∈      [0],b =        0 / 16 = 0,a ∈  [1,16],b = [16,31] / 16 = 1,a ∈ [17,32],b = [32,47] / 16 = 2,a ∈ [33,48],b = [48,63] / 16 = 3,a ∈ [49,64],b = [64,79] / 16 = 4,...

请注意,这只有在a和b为正数时才有效,并且要注意可能存在溢出的情况.
如果怀疑den可能会溢出,那么您可以使用此表达式的另一个版本:

int b = (a - 1) / den + 1;

唯一的缺点是当a = 0时它将返回1.如果这是一个问题,你可以添加如下内容:

int b = (a - 1) / den + 1 - !a;

请注意,您也可以以相同的方式处理负值(从零开始舍入):

int b = (a > 0) ? (a - 1) / den + 1 : (a - den + 1) / den;

(编辑:李大同)

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

    推荐文章
      热点阅读