• Java的运算符号(逻辑与、或、非、移位运算)


     

    1.只可将AND,OR 或NOT 应用于布尔值。与在C 及C++中不同,不可将一个非布尔值当作布尔值在逻辑表达式中使用。
    2.在AND(&&)运算中a()&&b()&&c(),当a为false时,b与c都不再执行,因为整个表达式都是false了,没必要再执行下去,OR(||)也是一样,当有一个为true时就结束。


    1  2  3  4  5  6  7  8  9  10  11  
    public class CalClass {   static Boolean test(int num){    System.out.println(num+">2"+(num>2));    return num>2;   }   public static void main(String[] args){    int i = 1, j =3 , k = 4;    System.out.println(test(i)||test(j)||test(k));    System.out.println("end");   }  }

    3.对于布尔值,按位运算符(如&)具有与逻辑运算符(如&&)相同的效果,只是它们不会中途“短路”。


    移位运算符

    左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补 0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java 也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。
    若对char,byte 或者short 进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个 int数里移动不切实际的位数。若对一个long 值进行处理,最后得到的结果也是long。此时只会用到右侧的 6个低位,防止移动超过 long 值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对 byte 或short 值进行右移位运算,得到的可能不是正确的结果(Java 1.0 和Java 1.1 特别突出)。它们会自动转换成int 类型,并进行右移位。但“零扩展”不会发生。

    http://www.blogjava.net/rosen/archive/2005/08/12/9955.html

    “>> 右移”;“<< 左移”;“>>> 无符号右移”
    例子:

    例子:
    -5>>3=-1
    1111 1111 1111 1111 1111 1111 1111 1011
    1111 1111 1111 1111 1111 1111 1111 1111
    其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。

    -5<<3=-40
    1111 1111 1111 1111 1111 1111 1111 1011
    1111 1111 1111 1111 1111 1111 1101 1000
    其结果与 -5*2*2*2 完全相同。

    -5>>>3=536870911
    1111 1111 1111 1111 1111 1111 1111 1011
    0001 1111 1111 1111 1111 1111 1111 1111

  • 相关阅读:
    JSP中文乱码的一点研究
    Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下
    DOS命令学习
    Oracle学习笔记(一)
    登录时候的图片验证码的实现
    DIY随机数产生类
    使用VS2010建模
    Random快速连续产生不相同随机数
    魔兽争霸3冰封王座英雄以及兵种语言
    取两个地图坐标之间的距离
  • 原文地址:https://www.cnblogs.com/huanjianlin/p/2998056.html
Copyright © 2020-2023  润新知