一.算术操作符
+ - * / %
1. 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. 对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数法。
3. %操作符的两个操作数必须为整数。返回的是整除之后的余数。
二.移位操作符
1.<< 左移操作符
移位规则: 左边抛弃、右边补0
32个二进制位,左移操作符如字面意思就是将其整体想左移动一个二进制位,向左移动几位则右边补上几位,保持整体是32位,再根据二进制算出最后结果
2.>>左移操作符
移位规则: 1. 逻辑移位 左边用0填充,右边丢弃
如果是无符号数,不管是左移还是右移都是“逻辑移位”
2. 算术移位 左边用原该值的符号位填充,右边丢弃
如果是有符号数 ,则进行算术位移
①,如果是做左移运算,那么做的是“逻辑移位”,同 1中无符号数的左移。
②,如果是做右移运算,那么做的是“算术移位”
负数(最前面一位是1)
。
正数(最前面一位是0)
说白了就是右移不改变最前面一位代表符号的,后面遵循规则移动就好了
也就是说右移和左移都不会改变变量符号
三.位操作符
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
-
按位与(&):对于每个相应的二进制位,如果两个操作数的相应位都是1,则结果为1;否则为0。
a = 5 # 二进制表示为 0101 b = 3 # 二进制表示为 0011 result = a & b # 与运算,结果为 0001,即 1 print(result) # 输出 1
num = 7 if num & 1: print("奇数") else: print("偶数")
-
按位或(|):对于每个相应的二进制位,如果两个操作数的相应位中至少有一个是1,则结果为1;否则为0。
a = 5 # 二进制表示为 0101 b = 3 # 二进制表示为 0011 result = a | b # 或运算,结果为 0111,即 7 print(result) # 输出 7
READ = 1 # 读取权限,二进制表示为 0001 WRITE = 2 # 写入权限,二进制表示为 0010 EXECUTE = 4 # 执行权限,二进制表示为 0100 permission = READ | WRITE # 合并读取和写入权限,结果为 0011,即 3 print(permission) # 输出 3
-
按位异或(^):对于每个相应的二进制位,如果两个操作数的相应位不同,则结果为1;否则为0。
a = 5 # 二进制表示为 0101 b = 3 # 二进制表示为 0011 result = a ^ b # 异或运算,结果为 0110,即 6 print(result) # 输出 6
a = 5 b = 3 a = a ^ b b = a ^ b a = a ^ b print(a, b) # 输出 3 5
-
按位取反(~):对每个二进制位执行逻辑反转操作,即0变为1,1变为0。
a = 5 # 二进制表示为 0000 0101
result = ~a # 取反操作,结果为 1111 1010,即 -6
print(result) # 输出 -6
a = 0b10101010
result = ~a # 按位取反操作,结果为 0b01010101
print(bin(result)) # 输出 0b01010101
四. 赋值操作符
它可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。
int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000000.0;//使用赋值操作符赋值。
赋值操作符可以连续使用,使代码简洁且便于检查调试
a = x = y+1;//连续赋值
复合运算符就是这么来的,是不是看起来更加简洁明了
x = x+10;
x += 10;//复合赋值
再复习一下复合运算符还有这些
+= -= *= /= %= >>= <<= &= |= ^=
前面一个符号就是其需要做的变化,后面等于是说将其操作后的值重新赋给前面的变量