热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java运算符&与&&<<>>>>>区别

说说&和&&的区别。&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为

说说&&&的区别。

&&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当strnull时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长

& 操作符两边的表达式不是 boolean 类型时, & 表示按位与操作 3 a^b <<2 一开始,我看到 a^b,想当然的认为是a的b次方,后来才发现,Java中,要表示 a的b次方,Math.pow(a,b),如果是在题目中表示,也不会加上^这个符号,加上了 ^ a^b 就表示是异或运算 时, a^b<<2, <<优先级比 ^高,所以, b先左移2位(相当于乘以4)再与a异或( 两个值'相同为假,不同为真' ),10000^110为22 <<   >>    >>>区别 a)“>>”运算符

“>>”运算符作带符号的位移处理,它作位移处理时,会先将值向右移,并在高位填0,然后将位移后所空出的高位,全部改成原来的最高位的值(代表正负号的位)。也就是说负的值位移后,仍然是负的值,比如:

-10>>2 =-3

-10= 1111 1111 1111 1111 1111 1111 1111 0110

右移2位:0011 1111 1111 1111 1111 1111 1111 1101

结果:1111 1111 1111 1111 1111 1111 1111 1101 (全部天上原本符号位的值:1)

b)“>>>”运算符

“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。比如:

-10>>>2=1073741821

-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原来的“符号”位的值(一长串1),空上的全部直接填0)

0011 1111 1111 1111 1111 1111 1111 1101=1037341821

c)“<<”运算符

“>>”运算符的所作的也是无符号的位移处理,同样地,它不会将所处理的值的最高位视为正负符号,它作位移处理时,会直接左移并在低位填入0。所以第二高位以下的位若移到了最高位,该值的正负可能会与原来的不同。

-2147483647<<2=4

-2147483647=1000 0000 0000 0000 0000 0000 0000 0001


0000 0000 0000 0000 0000 0000 0000 0100=4

d)“<<<”运算符
恩,当然了,在java里不存在它。


推荐阅读
author-avatar
荷丹满
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有