先抛出问题,你觉得下面的代码会输出什么样的结果?
/* 一个简单的示例代码 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = -10;
int b = 10;
int c = -3;
int d = 3;
printf("结果1: %d\n", a%d);
printf("结果2: %d\n", b%c);
printf("结果3: %d\n", a%c);
printf("结果4: %d\n", a/d);
printf("结果5: %d\n", b/c);
printf("结果6: %d\n", a/c);
return 0;
}
int
类型,没有问题。但现象是结果有时对,有时不对。发现在输入负数时结果会出问题,这么一来大概就知道问题出在什么地方了。先来看一下上面示例代码的输出的结果,有没有和你想的一样?
我们先来考虑一下,为什么上面示例代码的在取余和取整时符号不同呢?这就涉及到C语言中负数参与除法时符号的问题。
C 语言中负数做除法的时候,商是令其与分母相乘的积的绝对值不超过分子的绝对值且最接近的那个数。
END
→点关注,不迷路←
文章引用微信公众号"嵌入式微处理器",如有侵权,请联系管理员删除!