+=的特殊用法
用于算术运算
可以用来对字符串进行拼接
只要 + 的两边有一个是字符串,就是在进行字符串的拼接
“Hello”+100+200 --> “Hello100200”
100+200+”Hello” --> “300Hello”
对字符类型进行运算的时候,是将字符对应的Unicode编码作为一个int类型的整数来进行计算
条件运算符
可以根据条件去执行不同的语句
? :
条件语句?语句1:语句2;
执行流程:
当条件语句的结果为true,就执行语句1
当条件语句的结果为false,就执行语句2
int a,b;
找出a,b中较大的值
int t = a>b?a:b;
变量t就是a,b中较大的值
计算 |a-b|
int t = a>b?a-b:b-a;
找出a,b,c三个数字中的最大值和最小值
int t = a>b?a:b;
int m = t>c?t:c
int m = ( a>b?a:b)>c?( a>b?a:b):c
位运算符
位运算符是按照二进制位对数字进行运算
其运算效率要比其它运算符高
整数的位运算默认类型是int类型
按位与 &
按照二进制位,都为1则为1,否则为0
0&0=0 1&0=0 1&1=1
任何数字 &1 都等于原来的数字
任何数字 &0 都等于0
11 &5
00000000 00000000 00000000 00001011
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000001
使用场景:
如何判断两台电脑是在同一个局域网之内的??
IP地址
192.168.1.100
192.168.2.100
子网掩码:255.255.0.0
保留需要的二进制位
01010100 10101111 01011101 00101010
00000000 11111111 00000000 00000000
00000000 10101111 00000000 00000000
按位或 |
按照二进制位,都为0,则为0 否则为1
0|0=0 0|1=1 1|1=1
11 |5
00000000 00000000 00000000 00001011
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00001111
按位与和按位或运算也是一种逻辑运算符
当 & |的两边是boolean值的时候,就是逻辑运算符
当 & |的两边是数字的时候,就是位运算符
逻辑与 && 当计算到为false的条件,就不再计算后面的内容[短路了]
& 无论条件为true还是false,都会计算完所有的内容
通常情况下,为了提高计算的效率,推荐使用 短路的逻辑与 &&
如果非要计算完所有的表达式,就选择 不短路的逻辑与 &
逻辑或 || 当计算到为true的条件,就不再计算后面的内容[ 短路了]
| 无论条件为true还是false,都会计算完所有的内容
通常情况下,为了提高计算的效率,推荐使用 短路的逻辑或 ||
如果非要计算完所有的表达式,就选择 不短路的逻辑或 |
按位异或 ^
按二进制为,相同位0 不同为1
0^0=0 0^1=1 1^1=0
11 ^ 5=14
00000000 00000000 00000000 00001011
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00001110
14^11=5
00000000 00000000 00000000 00001110
00000000 00000000 00000000 00001011
00000000 00000000 00000000 00000101
14^5 = 11
00000000 00000000 00000000 00001110
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00001011
左移 <<
按照二进制位向左移动,在右边补0
每向左移动一位,相当于乘以2
当移动的位数达到32位的时候,取32的余数
-11<<1 =-22
1111111 11111111 11111111 111101010
1111111 11111111 11111111 111101001
0000000 00000000 00000000 000010110
右移 >>
按照二进制位向右移动,在左边补 符号位的数字
每向右移动一位,相当于除以2
当移动的位数达到32位的时候,取32的余数
-11>>1
111111111 11111111 11111111 1111010
111111111 11111111 11111111 1111001
000000000 00000000 00000000 0000110
无符号右移 >>>
按照二进制位向右移动,在左边补0