目录
1.算术操作符
+ - * / %
算术操作符的话有:加号(+),减号(-),乘号(*),除号(/),取模(%)。大家应该都非常的熟悉,也比较简单,给大家稍微说一下,其中的一些需要注意的地方我给大家讲一下。加号(+):进行加法计算,可以整数相加,字符相加,浮点数相加,减号(-),乘号(*)也一样。
除号(/),我们来看下面的小例子:
3/5打印的结果为0。这里就要说一下结果为什么是0,不应该是0.6嘛。
3/5,除号(/)两边的两个操作数是整数,所以这里进行的是整数除法,3/5这里是商0余3,不够除,商0,余了个3。如果把3换成6,6/5打印的结果就是1,这里就是商1余1。这就叫做整数除法
如果我们不想要打印整数,想要的是浮点数呢,我们来看下面的小例子:
想要打印出浮点数,除号两端的操作数最少有一个是浮点数,这样执行的就是浮点数的除法。我们就能得到0.6的结果。
因为除号两端有一个是浮点数,所以我们改成float类型。打印的是浮点数,所以用%f。
取模(%):
取模(%)操作符的两个操作数必须为整数。返回的是整除之后的余数。
上面例子打印的结果是 1 。
7 % 3求的就是7 / 3的余数,7 / 3的结果是商2余1,所以打印的结果就是1。
2.移位操作符
(<<) 左移操作符 (>>) 右移操作符
(<<) 左移操作符,我们来看下面例子:
上面把a向左移动移动一位就是把a的二进制序列向左移动一位。
左移操作的移动规则就是:左边丢弃,右边补0。
所以向左移动一位后求得b的值为4。
(>>) 右移操作符
右移操作符分两种:
算术右移,右边丢弃,左边补原符号位。
逻辑右移,右边丢弃,左边补0。
我们来看下面例子:
a的二进制序列:
00000000 00000000 00000000 00000010
向右移动一位的:
00000000 00000000 00000000 00000001
因为a是正数,所以不管是逻辑运算还是算术运算,左边补的都是0。所以得到的b值就是1。
我们可以测试一下当前编译器是采用的算术右移还是逻辑右移,我们用 -1 来测试一下:
负数:-1
我们存放到内存中
说到这里必须给大家交代一个知识点,
整数的二进制表示形式有三种,分别是原码,反码,补码。
原码:直接根据数值写出的二进制序列就是原码。
反码:原码的符号位不变,其他位按位取反就是反码。
补码:反码+1,就是补码。
-1,我们放到a里面怎么放呢,首先我们要写出它的原码,再写出它的反码,再写出它的补码。-1要存放到内存中的话,是以补码的形式存放的。(此算法是针对负数的,正整数原反补相同)。
-1的二进制序列: