代码语言:javascript复制先抛出问题,你觉得下面的代码会输出什么样的结果?
/* 一个简单的示例代码 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = -10;
int b = 10;
int c = -3;
int d = 3;
printf("结果1: %dn", a%d);
printf("结果2: %dn", b%c);
printf("结果3: %dn", a%c);
printf("结果4: %dn", a/d);
printf("结果5: %dn", b/c);
printf("结果6: %dn", a/c);
return 0;
}
- 昨天在公司帮一个小同事在查找问题,同事描述在做一个简单的功能是输入一组数据做算数运算,包括加减乘除。但是在做除法运算时,输出的结果有时是对的,有时是不对的。让我帮他查一下是什么原因导致。
- 首先,查看了他定义的变量类型为
int
类型,没有问题。但现象是结果有时对,有时不对。发现在输入负数时结果会出问题,这么一来大概就知道问题出在什么地方了。 - 先来看一下上面示例代码的输出的结果,有没有和你想的一样?
C语言中的负数取余取整规则
- 我们先来考虑一下,为什么上面示例代码的在取余和取整时符号不同呢,这就涉及到C语言中负数参与除法时符号的问题。
C 语言中负数做除法的时候,商是令其与分母相乘的积的绝对值不超过分子的绝对值且最接近的那个数。
- 取余时,余数与被除数(即分子的符号)相同
- 取整时,先将各个带符号的数全部取正值再做除法,再根据负号的个数确定商的符号
总结
这个问题在C语言中看似简单,但是往往不注意也可能会引起大问题。如果这个对你有一点点帮助,那么就是值得的。
好文推荐
Linux shell编程常用方法总结
C 基础知识精髓
Linux下AutoMake创建工程流程
Qt5.7.1添加支持openssl
zynq平台移植python3.10.5