a++:先取a的值再++ ++a:先自增再取值
(1)逻辑运算符主要有三个: && || !
注意: 逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean
(2)逻辑与 &&
规则: 两个操作数都为 true, 结果为 true, 否则结果为 false
(3)逻辑或 ||
规则: 两个操作数都为 false, 结果为 false, 否则结果为 true
(4)逻辑非 !
规则: 操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数).
Java 中对数据的操作的最小单位不是字节, 而是二进制位.
位运算符主要有四个:
& | ~ ^
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算.
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1 。
移位运算符有三个: << >> >>> 都是按照二进制位来运算.
最左侧位不要了, 最右侧补 0
最右侧位不要了, 最左侧补符号位(正数补0, 负数补1
最右侧位不要了, 最左侧补 0
是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法
条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
int a = 10;
int b = 20;
int c= a < b ? a : b;//如果a
位移操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
**算术操作符**
+ - * / % ++ --
(1)只有正数可以取模—%,返回的是整除之后的余数
除了%操作符以外,其余操作符均可作用于整数和浮点数
(2)对于/操作符,如果两个操作数都为正数,执行整数除法,而只要有浮点数执行的就是浮点数除法
位移操作符
<< //左移操作符
>> //右移操作符
注(1)左移操作符和右移操作符都只针对二进制位进行移位
左移操作符移位规则:左边抛弃、右边用零补
int num =10;
00000000000000000000000000001010//num在内存中中的二进制
0 00000000000000000000000000010100//num左移一位产生的结果,
//但实际上num在每被赋值的情况下,自身的值不会变化
num<<1
右移操作符右移运算分两种
(1) 逻辑位移 :左边用零填充,右边丢弃
(2)算数位移 左边用原该值的符号位填充,右边丢弃
int num = -1;//我们假设num=-1,这样内存中存储-1的补码为32个全1
11111111 11111111 11111111 11111111
**算数右移**:左边用原该值的符号位填充
11111111 11111111 11111111 11111111
由于是负数,所以符号位为1,即左边补1
**逻辑右移**:左边补0
01111111 11111111 11111111 11111111
警告:对于位移运算符,不要移动负数为,这个是标准未定义的
例如
int num = 10;
num>>-1;//error
整形存储
(1)原码 反码 补码
将原码直接转成二进制
正数 (1)在计算机中也存的补码
(2)原码 == 反码 ==补码
00000000 00000000 00000000 00000001//原码==反码==补码
int main()
{
int i=1;
printf("%d\n",i<<1);
return 0;
}
负数 (1)在计算机中存补码
(2)有符号数,最高位是符号位,1表示负数,0表示正数
10000000 00000000 00000000 00000001
11111111 111111111 11111111 11111110 //反码:符号位不变,其他位取反
11111111 111111111 11111111 11111111 //补码=反码+1
为什么负数在计算机中存补码,因为CPU只有加法器
#include
int main()
{
int i=1;
int j=-1;
printf("%d\n",i<<1);
printf("%d\n",i<<1);
printf("%d\n",i>>1);
printf("%d\n",j>>1);
printf("%d\n",j>>5);
return 0;
}
& //按位与 0与任何数&都是0 && 逻辑与 用来判断真假
| //按位或 有1就是1
^ //按位异或 相同为0,不同为1