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

如何获得和%运算符的正确值?,第1张

概述我想做以下事情: 我使用变量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 我想做以下事情:

我使用变量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;
总结

以上是内存溢出为你收集整理的如何获得/和%运算符的正确值?全部内容,希望文章能够帮你解决如何获得/和%运算符的正确值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1215121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存