【C语言】负数取模、取余

文章详细介绍了不同类型的取整方法,包括C语言中的向0取整、使用math库的向负无穷和正无穷取整,以及四舍五入取整。同时,对比了C和Python中负数取模的不同结果,指出取模和取余的区别在于商的取整规则:C中的%操作符实际上是取余,而Python的%操作符则相当于取模。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 关于“取整”

首先谈谈关于数学取整的问题

1. 向0取整

C中的除法和取整规则都是向0取整,即所有小数都向 0 的方向取整:
在这里插入图片描述

示例:

#include <stdio.h>

int main()
{
   
	// C中的除法和取整规则都是向0取整
	int i = -2.9;
	int j = 2.9;
	printf("%d\n", i); // -2
	printf("%d\n", j); //  2
	return 0;
}

补充:C++11中有一个trunc(...)取整函数,作用就是向0取整

在这里插入图片描述

2. 向负无穷取整

使用 floor(...)函数,使得所有小数都向负无穷方向取整:
在这里插入图片描述

示例:

#include <stdio.h>
### C语言中的除法和运算符 在C语言中,`/` 是用于执行整数或浮点数除法的运算符,而 `%` 则是用来计算两个整数相除后的数的运算符。这两个运算符具有相同的优先级,并且高于加法 `+` 和减法 `-` 的优先级[^1]。 #### 除法 `/` 当使用 `/` 对两个整数进行操作时,如果结果是一个小数,则会截断到最接近零的整数值。例如: ```c int result = 7 / 3; // 结果为 2,因为 7 / 3 ≈ 2.33 被截断成 2 ``` 对于浮点数之间的除法,结果将是精确的小数值: ```c float fResult = 7.0f / 3.0f; // 结果约为 2.333... ``` #### `%` 运算符 `%` 计算的是两数相除之后剩的部分。它仅适用于整型数据类型的操作数。例如: ```c int remainder = 7 % 3; // 结果为 1,因为 7 ÷ 3 商为 2 1 ``` 需要注意的一点是,在某些实现中,负数参与的结果可能有所不同,具体决于编译器如何定义商的方向。通常情况下遵循以下规则: - 如果被除数为正,那么无论除数是否为正,结果均为正值; - 若被除数为负,则结果亦为负值。 #### 示例程序展示两者区别与联系 下面通过一段简单的代码来演示这两种运算的应用场景及其差异之处: ```c #include <stdio.h> int main(void){ int dividend = 9, divisor = 4; printf("Dividend: %d\n",dividend); printf("Divisor : %d\n",divisor); // 整数除法 int quotient = dividend/divisor ; printf("Quotient (using '/'): %d \n",quotient ); // 运算 int remainer = dividend%divisor ; printf("Remainder(using '%'):%d \n",remainer ); return 0; } ``` 运行上述代码将会得到如下输出: ``` Dividend: 9 Divisor : 4 Quotient (using '/'): 2 Remainder(using '%'):1 ``` 这表明当我们用9去除以4的时候,可以完整地分成两次完整的四份还剩下一份未分配出去的东西即我们的数部分。 #### 关于优先级和其他注意事项 正如前面提到过的那样,乘法(`*`)、除法(`/`)以及运算(`%`)共享同一个级别较高的运算顺序位置;这意味着如果没有括号指定特定次序的话,默认是从左至右依次完成这些动作[^2]^。 另外值得注意的一个细节就是前置自增或者自减表达式的运用可能会改变变量本身的初始状态从而影响后续涉及到该变量的相关计算过程[^3]^。因此编写涉及复杂逻辑判断条件下含有多种不同类型混合使用的大型项目时候尤其要小心谨慎对待每一个细枝末节以免造成难以察觉却极其严重的错误!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值