根据需要的数字不同可以把操作符分为
三种:单目操作符,双目操作符和
三目操作符
加减乘除用+,-,*,/四个操作符表示
如果参与除法计算的两个数字都是整数
则计算结果只保留整数部分
%用来表示取余操作
15 % 6结果是3(15可以分解成12 +3,12是
6的整数倍,3是一个比6小的数字)
赋值操作符用=表示
赋值语句本身也可以作为数字使用,这个数字
就是赋值以后存储区里的数字
可以在一个表达式里多次使用赋值操作符,
这个时候优先计算右边的赋值操作符
绝大多数双目操作符可以和赋值操作符合并
成为复合赋值操作符(例如+=,/=等)
这种操作符会把双目操作符的计算结果
记录到存储区里
这种操作符通常在表达式里最后计算
自增操作符(++)和自减操作符(–)都是
单目操作符
它们只能和存储区一起使用
自增操作符可以把存储区的内容加一
自减操作符可以把存储区的内容减一
它们各有两种使用方法:
前操作(操作符写在存储区的前面)
后操作(操作符写在存储区的后面)
前操作表达式作为数字使用的时候是修改
后的数字
后操作表达式作为数字使用的时候是修改
前的数字
逻辑表达式的结果必须是布尔值
逻辑操作符用来编写逻辑表达式
!是一个单目逻辑操作符
它可以根据一个布尔值计算出另外一个
布尔值
这两个布尔值一定不同
这个操作叫做求反操作
双目逻辑操作符包括==(等于),!=(不等于),
>(大于),<(小于),>=(大于等于)和
<=(小于等于)
一个逻辑表达式里最多包含一个双目
逻辑操作符
与(&&)和或(||)可以用来连接两个逻辑
表达式
只要两个表达式里有一个的结果是真
用或(||)合并以后结果就是真
只要两个表达式里有一个的结果是假
用与(&&)合并以后结果就是假
与(&&)和或(||)都具有短路特征
如果前面表达式的结果可以决定合并后
表达式的结果就忽略后面的表达式
位操作符用来操作二进制数位的内容
~是一个单目位操作符
这个操作符可以根据一个数字计算出另外
一个数字,这两个数字所有二进制
数位的内容都不一样
这个操作叫按位求反
char 0x93 1001 0011
char ~0x93(0x6c) 0110 1100
双目位操作符包括按位与(&),按位或(|)
和按位异或(^)
它们都是把两个数字对应二进制数位的
内容互相进行计算
按位与(&)可以把对应数位的内容做与
计算
只要一个数位内容是0则与计算以后
结果就是0
3 0000 0011
& 5 0000 0101
0000 0001
任何数位内容和0做按位与结果一定是0
任何数位内容和1做按位与结果保持不变
可以利用按位与从一个数字里单独获得
某些数位的内容
0010 1011 & 0000 0001 结果是1
(利用按位与用来判断一个数字是否是奇数)
可以利用按位与把一个数字的某些数位
内容设置成0
0110 1011 & 1101 1111 结果是0100 1011
按位或(|)可以把对应数位的内容做或计算
只要一个数位的内容是1则或计算以后
结果就是1
3 0000 0011
| 5 0000 0101
0000 0111
任何数位内容和0做按位或保持不变
任何数位内容和1做按位或结果是1
可以利用按位或把某些数位内容设置成1
0110 1011 | 0000 0100 结果是0110 1111
按位异或(^)可以把对应数位的内容做
异或计算
如果两个数位内容一样则异或以后结果是0,
否则结果是1
3 0000 0011
^ 5 0000 0101
0000 0110
任何数位内容和0做按位异或结果保持不变
任何数位内容和1做按位异或结果变成相反数
可以利用按位异或把某些数位内容变成
相反数
0110 1001 ^ 0000 1111 结果是 0110 0110
移位操作可以把一个数字的所有二进制
数位内容统一向左或向右移动n个位置
********
00000011
00000011 向左移动2步
00001100 多余的数位内容被丢掉
空的数位里填上新数字
<<表示向左移位
表示向右移位
它们都是双目位操作符
左边的数字将要进行移位操作
右边的数字是移动的位数
3 << 2 对3进行向左移动2位的操作
向左移位后右边空出来的数位里固定填充0
无符号类型数字右移时左边空出来的数位
里填充0
(无符号类型)
1000 0101 >> 2 0010 0001
有符号类型数字右移时左边空出来的数位
里填充符号位的内容
(有符号类型)
1000 0101 >> 2 1110 0001
向左移动n位通常相当于乘以2的n次方
向右移动n位通常相当于除以2的n次方
位操作符不会修改存储区内容
&也可以作为单目操作符使用
它可以用来计算一个存储区
的地址
(类似从电话号码本里查找某个人
的电话号码)
可以用%p做占位符显示地址数据
我们的计算机里所有地址数据都是由
32个二进制数位构成的
*也可以做单目操作符使用
它可以根据地址找到一个存储区
(类似根据电话号码拨打电话)
三目操作符可以从两种计算规则里选择
一个
(类似于工具箱,可以从多个工具里选择)
三目操作符格式如下
布尔值 ? 表达式一 : 表达式二
布尔值为真就用表达式一进行计算
布尔值为假就用表达式二进行计算
计算绝对值的表格
- 非负数 * 本身 *
- 负数 * 相反数*
如果表达式里不同数字的类型不同
就必须首先转换成同一个类型
然后再进行计算
这个转换过程叫隐式类型转换
隐式类型转换过程中必须把占地小的类型
转换成占地大的类型
如果既有整数类型数字也有单精度浮点
类型数字,隐式类型转换时就把整数
类型转换成单精度浮点类型
如果既有无符号类型数字也有有符号类型
数字,隐式类型转换的时候就把有
符号类型转换成无符号类型
可以在程序里临时给数字指定一个类型
这叫做强制类型转换
强制类型转换格式如下
(char)300 把300当做字符类型数字使用
强制类型转换有可能导致数据内容丢失
类型转换不会修改存储区内容