- 前言
- 一.深度理解取余/取模运算
- 二.续行符与转义字符
- 三.逻辑运算符
- 四.位操作符
- 1. 按位与 按位或 按位取反
- 2.移位操作符
- 实战(重点)
- 五.深入理解 a++
- 六.操作符优先级
所有关于运算的操作符,不管是逻辑运算还是位运算,都是先将变量在内存中提取在CPU内存寄存器中进行运算,然后计算的结果在写回内存,所以我们操作的都是补码,因为内存中存储的都是数据的补码,只有我们打印某个数据时才会涉及到原码的概念。
建议在学习运算操作符之前先明白数据(整形)在内存中如何存储
《数据到底在内存中如何存储》
对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
想要得到小数部分一定一个操作数得是浮点数
% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
1.第一个问题整数的除法是如何取整的
为什么是这样的一种取整方式呢。
其实C语言中的默认取整方式是向零取整
向零取整的函数
向负无穷方向取整的函数,返回不大于x的最大整数值
向正无穷方向取整的函数,返回不小x的最小整数值
四舍五入取整
取整方案对比:
这里你会发现就算不同的取整方式可能会得到同样的值。
重点来了:取模和取余一样嘛
先说结论
本质 1 取整:
取余:尽可能让商,向零取整
取模:尽可能让商,向-∞方向取整
而我们前面已经说了C语言默认的取整方案为向零取整,所以C语言中的%运用其实是在取余数。
被除数、除数、商、余数的关系:
如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足 a = q*d + r 且0 ≤ |r|< |d|。。其中,q被称为商,r 被称为余数。
接下来来一个怪一点的:-10%3=?
在VS2013编译器中:
在Python 2.7.12
为什么会出现不同的结果呢
根本原因是
C语言中 % 是取余数 — 得出的商向零取 整
Python中% 是取模 — 得出的商向负无穷取整
这样我们就能解释了,我们知道了商知道被除数和除数就可以求出余数
r余数的大小是取决于商的,而商的大小有取决与取整方式:
对任何一个大于0的数,对其进行0向取整和-∞取整,取整方向是一致的。故取模等价于取余
对任何一个小于0的数,对其进行0向取整和-∞取整,取整方向是相反的。故取模不等价于取余
这句是为什么C语言中通常将取余等价与取模,原因就是我们通常都是正数,而正数的取余才真正等价于取模。
同符号数据相除,得到的商,一定是正数(正数vs正整数),即大于0!=在对其商进行取整的时候,不管是向零取整还是向负无穷取整取整的方向都是一样的所以所得的商也一样,余数也一样,所以取模等价于取余。
同符号时:取模等价于取余
不同符号时所得的商一定是负数,取模向负无穷取整,取余是向零取整则取整方向不一样,所以所得的商不一样,所得的余数也不一样。
注意:续航符的后面不能带任何东西(包括空格)
- 的转义功能:
一道面试题:
解析:


