QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
2280
查看: 1190|回复: 6

[系列教程] 【Java 教程(原创)】011.运算符与表达式(下)

[复制链接]
最佳答案
42 
累计签到:953 天
连续签到:1 天
零度非安全 发表于 2017-1-15 16:59:41 11906 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 零度非安全 于 2017-1-19 14:38 编辑

【Java 教程(原创)】索引帖

位运算符

整型数据在内存中以二进制的形式表示,比如一个 int 型变量在内存中占 4 个字节,共 32 位。int 型数据 7 的二进制表示为:
  1. 00000000   00000000   00000000   00000111
复制代码

左边最高位是符号位,最高位是 0 表示正数,是 1 表示负数。负数采用补码表示,比如 -8 的二进制表示为:
  1. 11111111   11111111   11111111   11111000
复制代码

这样就可以对两个整型数据实施位运算,即对两个整型数据对应的位进行运算得到一个新的整型数据。

1>“按位与”运算符
“按位与”运算符“&”是双目运算符,用于对两个整型数据 a、b 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a、b 两个数据对应位都是 1,则 c 的该位是 1,否则是 0。如果 b 的精度高于 a,那么结果 c 的精度和 b 相同。

例如:
  1.     a:0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0   0 0 0 0 0 1 1 1
  2. &   b:1 0 0 0 0 0 0 1   1 0 1 0 0 1 0 1   1 1 1 1 0 0 1 1   1 0 1 0 1 0 1 1
  3. ————————————————————————————————————————————————————————————————————————————
  4.     c:0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0   0 0 0 0 0 0 1 1
复制代码

2>“按位或”运算符
“按位或”运算符“|”是二目运算符,用于对两个整型数据 a、b 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a、b 两个数据的对应位都是 0,则 c 的该位是 0,否则是 1。如果 b 的精度高于 a,那么结果 c 的精度和 b 相同。

3>“按位非”运算符
“按位非”运算符“~”是单目运算符,用于对一个整型数据 a 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a 的对应位是 0,则 c 的该位是 1,否则是 0。

4>“按位异或”运算符

“按位异或”运算符“^”是二目运算符,用于对两个整型数据 a、b 按位进行运算,运算结果是一个整型数据 c。运算法则是,如果 a、b 两个数据的对应位相同,则 c 的该位是 0,否则是 1。如果 b 的精度高于 a,那么结果 c 的精度和 b 相同。

由异或运算法则可知:
  1. a ^ a = 0
  2. a ^ 0 = a
复制代码

因此,如果 c = a ^ b,那么 a = c ^ b,也就是说,“^”的逆运算仍然是“^”,即 a ^ b ^ b 等于 a。

使用位运算符可以操作逻辑型数据,法则如下:
  1. 当 a、b 都是 true 时,a & b 是 true,否则 a & b 是 false。
复制代码

位运算符在操作逻辑型数据时,与逻辑运算符 &&、||、! 不同的是,位运算符要在计算完 a 和 b 之后再给出运算的结果。比如,x 的初值是 1,那么经过下列逻辑比较:
  1. ((y = 1) == 0) && ((x = 6) == 6);
复制代码

运算后,x 的值仍然是 1。但是,如果经过下列位运算:
  1. ((y = 1) == 0) & ((x = 6) == 6);
复制代码
之后,x 的值将是 6。

在下面这个例子中,利用“异或”运算的性质,对几格字符进行加密并输出密文,然后再解密,运行效果如下所示:

Xor.gif

例子代码如下:

Xor.java
  1. public class Xor{
  2.         public static void main(String args[]){
  3.                 char a1 = '鱼',a2 = 'C',a3 = '论',a4 = '坛';
  4.                 char secret = 'A';
  5.                 a1 = (char)(a1 ^ secret);
  6.                 a2 = (char)(a2 ^ secret);
  7.                 a3 = (char)(a3 ^ secret);
  8.                 a4 = (char)(a4 ^ secret);
  9.                 System.out.println("密文:" + a1 + a2 + a3 + a4);
  10.                 a1 = (char)(a1 ^ secret);
  11.                 a2 = (char)(a2 ^ secret);
  12.                 a3 = (char)(a3 ^ secret);
  13.                 a4 = (char)(a4 ^ secret);
  14.                 System.out.println("原文:" + a1 + a2 + a3 + a4);
  15.         }
  16. }
复制代码


                               
登录/注册后可看大图


instanceof 运算符

instanceof 运算符是二目运算符,左边的操作元是一个对象,右边是一个类。当左边的对象是右边的类或子类创建的对象时,该运算符运算的结果是 true,否则是 false。


                               
登录/注册后可看大图


运算符综述

Java 的表达式就是用运算符连接起来的符合 Java 规则的式子,运算符的优先级决定了表达式中运算执行的先后顺序。例如,x < y && !z 相当于 (x < y) && (!z)。鱼油们没有必要去记忆运算符的优先级别,在编写程序时尽量使用 () 运算符来实现想要的运算次序,以免产生难以阅读或含糊不清的计算顺序。运算符的结合性决定了并列的相同级别运算符的先后顺序,例如,加、减的结合性是从左到右,8 - 5 + 3 相当于 (8 - 5) + 3;逻辑运算符 ! 的结合性是从右到左,! ! x 相当于 ! (! x)。下表是 Java 中所有运算符的优先级和结合性,有些运算符和 C 语言中相同,我在这里整理给各位鱼油们

     优  先  级                         描                述                 运  算  符               结  合  性
          1分隔符 []、()、.  、,  、;               从右到左
          2对象归类,自增、自减运算,逻辑非 instanceof、++、--、!               从左到右
          3 算术乘、除运算 *、/、%               从左到右
          4 算术加、减运算 +、-               从左到右
          5 移位运算 >>、<<、>>>               从左到右
          6 大小关系运算 <、<=、>、>=               从左到右
          7 相等关系运算 ==、!=               从左到右
          8 按位与运算 &               从左到右
          9 按位异或运算 ^               从左到右
         10 按位或运算 |               从左到右
         11 逻辑与运算 &&               从左到右
         12 逻辑或运算 ||               从左到右
         13 三目条件运算 ?、:               从左到右
         14 赋值运算 =               从右到左



【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。



评分

参与人数 1鱼币 +5 贡献 +2 收起 理由
alltolove + 5 + 2 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

楼层
跳转到指定楼层
最佳答案
2 
累计签到:59 天
连续签到:1 天
xw0314 发表于 2017-1-15 20:53:24 | 显示全部楼层
7的二进制不是111吗

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 感谢指正

查看全部评分

最佳答案
0 
累计签到:11 天
连续签到:1 天
小小七 发表于 2017-1-20 14:18:53 | 显示全部楼层
instanceof为何不举例呢
最佳答案
42 
累计签到:953 天
连续签到:1 天
零度非安全  楼主| 发表于 2017-1-20 14:32:31 | 显示全部楼层
小小七 发表于 2017-1-20 14:18
instanceof为何不举例呢

这个可以自己网上查看其用法
最佳答案
0 
累计签到:52 天
连续签到:1 天
CarpLyy 发表于 2017-3-20 13:26:32 | 显示全部楼层
整理的很好
最佳答案
0 
累计签到:200 天
连续签到:1 天
ShaunSS 发表于 2017-5-16 16:15:00 | 显示全部楼层
011 打卡
最佳答案
0 
累计签到:14 天
连续签到:1 天
suiyisuixin2017 发表于 2018-4-15 21:10:27 | 显示全部楼层
谢谢讲解

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-4-25 18:36

快速回复 返回顶部 返回列表