C语言视频 VS2015:[12]算术运算符
1、算术运算符主要是用来处理四则运算的符号,是最简单,最常用,但同时也是陷阱最多的运算符符号,在C语言中最长用的算术运算符主要有:加(+),减(-),乘(*),除(/),余(%)
1、C语言加法运算同时支持:
① 常量 + 常量;
② 变量 + 变量;
③ 变量 + 常量;
④ 不同类型的变量相加;
等,具体的效果如下:
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/bff8683e21c2bbd62cf3745b116186254093aeba.jpg)
2、无符号整数相加的溢出问题:
如下图所示,可以看到 255 + 1 = 0;
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/6ca98461862541931ccba9b7df1bd10ff326abba.jpg)
3、具体的原因分析如下:
① 255对应的二进制:1111 1111
② 1对应的二进制 :0000 0001
③ 255+1和二进制:1 0000 0000
④ 而unsigned char只有8位,于是最高位被舍弃了,
保留了最低的8位:0000 0000
⑤ 0000 0000 转换成十进制:0
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/cfa9ae04541bd10f24051429ba0e1799e82aa7ba.jpg)
4、有符号整数相加溢出问题:
127 + 1 = -128;
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/d04eec260d9a310ecebaf09931b842406bfea2ba.jpg)
5、具体的原因分析如下:
① 右键监视窗口->16进制显示,效果如下:
② 从16进制的显示上我们可以看出: 0x7f + 0x01 = 0x80,这个运算是符合加法运算规则的;
③ 从另一个角度也说明了计算机的底层运算时不区分符号的;
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/bbf95c406afec3142ee68c5dcac1b727ad539cba.jpg)
6、那么为什么显示的是-128呢?具体分析如下:
① 0x80 的二进制是:1000 0000;
② 最高位是1说明是负数,并且属于补码
③ 计算 0x80 补码对应的原始数据;
④ 0x80 减 1后的二进制是:0111 1111
⑤ 所有位取反:1000 0000
⑥ 转成10进制:128
⑦ 添加上符号:-128
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/01bd69f7980e5f20ae524668bd20b93acc898eba.jpg)
1、C语言减法跟加法运算一样同时支持:
① 常量 - 常量;
② 变量 - 变量;
③ 变量 - 常量;
④ 常量 - 变量;
等,具体的效果如下:
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/3761a73acd8920c5d52c9186568a59de440788ba.jpg)
2、减法溢出问题:
-128 - 1 = 127;
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/274e9635dd8a59deb22491b2b370d5413b8c84ba.jpg)
3、为什么数字越减越大呢?
16进制显示后或许就可以看出答案了:
① -128 的16进制是:0x80
② 1 的16进制是:0x01
③ 0x80 - 0x01 = 0x7f
④ 0x7f 转换成10进制:127
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/89402670d5413a8c5a2bbcbc1ffc508c9ace81ba.jpg)
1、乘法也同样支持各种方式运算,具体图下图所示:
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/2e66f9ef28066b0198f92af33df39187021cf3ba.jpg)
2、乘法也存在溢出问题,由于加减已经介绍,所以不再推导,感兴趣的可以自己推导
1、除法也同样支持各种方式运算,具体图下图所示:
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/3201a8f39187031c96e4b64f6a86242fa972ecba.jpg)
2、nQuotient2 的值为 3 不是 3.6?
原因在于整数相除,结果依然是整数,所以小数部分被舍弃了;
1、在除法运算中我们看到了
整数运算中:36 / 10 = 3 的现象;
那么余数怎么求呢?
在C语言里面求余数主要使用:%
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/aebdff86242fa872803ba757bfdaf05e4b23e9ba.jpg)
2、余数的符号是怎么确定的呢?
按照msdn的说明,余数主要是跟被除数的符号一致的,上图就已经充分证明了这一点哦
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/a9338a1fbee434dae77a5390f271fe1d97d8e4ba.jpg)
3、方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!
![C语言视频 VS2015:[12]算术运算符](https://exp-picture.cdn.bcebos.com/f11f54237971fe1d8dfc01aaea20a7cd0d6ee0ba.jpg)