一、操作符的种类
算术操作符
位移操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号操作符
下标引用、函数调用和结构成员
- 算术操作符
+ - * / %
加 减 乘 除 取模
例如
3除于5
为什么不是0.6呢
3除5的时候都是整数,除法的执行是整数除法
3除5不够除答案就是商0余3
如果改为float类型可不可以呢
可以看到结果仍然是0
当其中一个值改为浮点数的时候,执行的就是浮点数的除法
取模
当7模3就等于是
7除3=2......1
求模就相当于求余数所以等于1
取模的两端必须是整数
移位操作符
>> <<
左移操作符
把2传到a里,4是整型int类型为4个字节32个比特位
此时里面的内容为
00000000 00000000 00000000 00000010
左移
溢出的0| 00000000 00000000 00000000 0000010 0《补的0
所以答案为4
右移操作符
1.算术右移
右边丢弃,左边补原符号位
2.逻辑右移
右移丢弃,左边补0
拿正数不管怎么样去测结果都一样,因为正数的符号位是0,负数的符号位是1
负数:-1存在内存中
对于正数来说以下都是相同的,负数用以下方法计算
整数的二进制表示形式:其实有3种
源码:直接根据数值写出的二进制序列就是原码
反码:原码的符号位不变,其他位按按取反就是反码
补码:反码+1,就是补码
-1:
源码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111 11111111 11111111 11111111
运行结果发现还是负1所以发现当前右移操作符使用的是算术右移。
因为右移之后补的还是符号位1,所以为负数结果也还是
11111111 11111111 11111111 11111111
位操作符
& | ^
1.按位与
2.按位或
3.按位异或
按位与
A=00000000 00000000 00000000 00000011 = 3
B=00000000 00000000 00000000 00000101 = 5
按位与=有0出0全1出1\
C=00000000 00000000 00000000 00000001 = 1
按位或(二进制位)
A=00000000 00000000 00000000 00000011 = 3
B=00000000 00000000 00000000 00000101 = 5
按位与=有1出1全0出0\
C=00000000 00000000 00000000 00000111 = 7
按位异或
A=00000000 00000000 00000000 00000011 = 3
B=00000000 00000000 00000000 00000101 = 5
按位与=相同为0,相异为1
C=00000000 00000000 00000000 00000110 = 6
练习
不使用新的变量使得原来a=3,b=5,变为a=5,b=3
第一步 第二步 第三步
A=011 A=110 A=110
B=101 B=101 B=011
a=110 B=011 C=101
练习;编写一个程序:求一个整数储存在内存中的二进制中1的个数