如何解决这个操作有简写吗?
在 C 语言中,这个操作没有像 /=
这样的简写符号吗?
int variable = 5;
variable = round(variable / (float)2);
我想不出任何。
解决方法
所以这真的取决于你在做什么。大多数时候你不应该真正关心快捷方式,而是可读性和正确性。在这种情况下,您的代码可读性很强,但不是很正确,因为它的代码除以浮点数,因此结果只有 23-24 位精度,小于 int
;即使您使用双精度 2.0
,您也会获得 53-54 位的精度,该精度小于 long long int。
下面的代码可能不仅速度更快,而且在更多情况下也能正常工作。
如果您想使用无符号数(或用非负值签名),那么您可以这样做:
unsigned int variable = 5;
variable = (variable + 1) >> 1;
即添加 1 并向右移位。
如果您需要支持已签名并使用带有正确定义除法的 C99+ 或 C89(向零截断),您可以这样做
variable = (variable + (variable > 0 ? 1: -1)) / 2;
这些工作是因为整数除法总是返回一个整数:
#include <stdio.h>
int main(void) {
for (int i = -5; i <= 5; i ++) {
int variable = i;
variable = (variable + (variable > 0 ? 1: -1)) / 2;
printf("%3d\t%4.1f\t%3d\n",i,i/2.0,variable);
}
}
将打印出来:
-5 -2.5 -3
-4 -2.0 -2
-3 -1.5 -2
-2 -1.0 -1
-1 -0.5 -1
0 0.0 0
1 0.5 1
2 1.0 1
3 1.5 2
4 2.0 2
5 2.5 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。