zoukankan      html  css  js  c++  java
  • Java位运算符

    简介

    数字是用补码表示和移位的,移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

    &

    与,按位比较,都为1时结果为1,否则为0。&也可以用于逻辑判断,如果两个都是true则结果为true。和&&的区别是,&不短路。

    |

    或,按位比较,任何一位为1时结果为1,否则为0。|也可以用于逻辑判断,如果任何一个是true则结果为true。和||的区别是,|不短路。

    ~

    非,对每一位二进制取反。

    ^

    异或,只有在两个比较的位不同时其结果是 1,否则为0。^也可以用于逻辑判断,如果一个是true另一个是false则结果是 true。

    << 

    运算规则:按二进制形式把所有的数字向左移动对应的位数,高位舍弃,低位的空位补零。

    语法格式:需要移位的数字 << 移位的次数

    例如: 3 << 2,则是将数字3左移2位

    计算过程:

    首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:在正数舍弃的位不包含1且舍弃后的最高位不为1或者负数舍弃的位不包含0且舍弃后的最高位不为0时,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

    >> 

    运算规则:按二进制形式把所有的数字向右移动对应位数,低位舍弃,高位的空位补符号位,即正数补零,负数补1.

    语法格式:需要移位的数字 >> 移位的次数

    例如11 >> 2,则是将数字11右移2位

    计算过程:

    11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3。

    >>> 

    无符号右移操作符与普通右移操作符“>>”的区别是>>在右移时将以符号扩展原则进行右移,即在右移过程中它将保持原有数据的正负号不变,简单地说,就是在右移正数时高位补0、右移负数时则高位补1,而无符号右移操作符>>>在右移时不考虑符号问题,即无论右移正数还是负数,其最高位都是补0。

  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/gjb724332682/p/13752569.html
Copyright © 2011-2022 走看看