我使用变量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;总结
以上是内存溢出为你收集整理的如何获得/和%运算符的正确值?全部内容,希望文章能够帮你解决如何获得/和%运算符的正确值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)