算术操作符(+ - * / %)
整除的除法1/2——> 0
浮点型除法1.0——> 0.5(至少有一个数是小数)
% 计算的是整除后的余数,两端必须是整数
移位操作符(左移<< 右移>>)
移位操作符移动的是二进制位
只能对整数进行移位符操作
整数的二进制表示有三种:原码 反码 补码
整数在内存中存储的是补码,输出的是原码
正的整数的原码,反码,补码是相同的。
负的整数的原码,反码,补码是要计算的。
一个整数是四个字节,一个字节八个比特位
例:正数7
原码:0000........00111 有32位
第一位是符号位,符号位是0为正数,是1为负数
例:-7
原码:1000.......00111
反码:11111.......11000(除了符号位不变,其他位与原码相反)
补码:11111.....11001(反码加1就是补码)
左移操作符(左边丢弃,右边补0)
int a=7 0000.....0111
int b=a<<1 0 000....01110
输出a=7 b=14
int a=-7 1111.....001
int b=a<<1 1 1111....0010
1111....0001 变回反码-1
100.....1110 取反变回原码
输出a=-7 b=-14
因为这是补码,输出时要变回原码
右移操作符(①算术移位:右边丢弃,左边补原符号位 ②逻辑移位:右边丢弃,左边补0
两种选择取决于编译器)
int a=7 000...0111
int b=a>>1 000...0011 1
输出:a=7 b=3
int a=-7 1111...001
int b=a>>1 1111...100 1
1111...011 减一变反码
100...100 取反边原码
输出a=-7 b=-4
注意:对于移位运算符,不要移动负数位(>>-1,<<-1),这个是标准未定义的。