合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[success] # 移位运算符 * `<<` 左移运算符,用于将数据的二进制位向左移动,右边使用0补充,**看箭头 箭头朝左所以左移** * `>>`右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充,**看箭头 箭头朝右所以右移** * `>>>` 表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0补充**看箭头 箭头朝右所以右移** 规律 * `<<` 左移等于 `当前值 * 2^移动值`,举例子`2<<1 为 4 即2*2^1` `2<<2 为8 即2*2^2` * `>>` 右移等于 `当前值 / 2^移动值`,举例子`2>>1 为 1 即2 / 2^1` `2>>2 为 0 即2 / 2^2 因为二进制没0.5概念所以为0` 对`byte`和`short`类型进行移位时,会首先转换为`int`再进行位移。 >[danger] ##### 案例 int 四个字节 一个字节八位二进制 所以下面是 32 位 ~~~ int n = 7; // 00000000 00000000 00000000 00000111 = 7 int a = n << 1; // 00000000 00000000 00000000 00001110 = 14 int b = n << 2; // 00000000 00000000 00000000 00011100 = 28 int c = n << 28; // 01110000 00000000 00000000 00000000 = 1879048192 int d = n << 29; // 11100000 00000000 00000000 00000000 = -536870912 ~~~ ~~~ int n = 7; // 00000000 00000000 00000000 00000111 = 7 int a = n >> 1; // 00000000 00000000 00000000 00000011 = 3 int b = n >> 2; // 00000000 00000000 00000000 00000001 = 1 int c = n >> 3; // 00000000 00000000 00000000 00000000 = 0 ~~~