C语言中负数做运算,你会了吗?

新闻资讯   2023-07-21 20:06   37   0  

先抛出问题,你觉得下面的代码会输出什么样的结果?

/*  一个简单的示例代码 */
#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语言中负数参与除法时符号的问题。

C 语言中负数做除法的时候,商是令其与分母相乘的积的绝对值不超过分子的绝对值且最接近的那个数。

  • 取余时,余数与被除数(即分子的符号)相同;
  • 取整时,先将各个带符号的数全部取正值再做除法,再根据负号的个数确定商的符号。

总 结

这个问题在C语言中看似简单,但是,往往不注意也可能会引起大问题。如果这个对你有一点点帮助,那么就是值得的。

END

来源:Linux兵工厂

版权归原作者所有,如有侵权,请联系删除。

推荐阅读
STM32的ADC用法,你知道几种?
走嵌入式方向,一定要软硬件都懂?
单片机开发之节省内存大法(C语言版本)

→点关注,不迷路←

文章引用微信公众号"嵌入式微处理器",如有侵权,请联系管理员删除!

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。