06 运算符 v1.0

本贴最后更新于 2480 天前,其中的信息可能已经时过境迁

1.表达式:

表达式就是符号(如加号、减号)与操作数(如 b,3 等)的组合

运算符按照其要求的操作数数目来分,可以有单目运算符双目运算符和三目运算符,它们分别对应于 1 个、2 个、3 个操作数。

单目:+(取正)-(取负) ++(自增) - -(自减)

双目:+ - * / %(取余)

三目:a>b?true:false 说明:当 a 大于 b 的时候,为 true(也就是冒号之前的值),否则为 false;

运算符按其功能来分,有算术运算符赋值运算符关系运算符逻辑运算符位运算符和其他运算符。

2.赋值运算符 = //特别要注意的是,不是表示等于,表示等于用==

变量名 = 表达式; //将右边的值给左边的变量

3.算术运算符 +,-,*,/,%

int int1 = 99;

int int2 = 25;

prt.println("int1 + int2 = " + (int1 + int2));

prt.println("int1 - int2 = " + (int1 - int2));

prt.println("int1 * int2 = " + (int1 * int2));

prt.println("int1 / int2 = " + (int1 / int2));

prt.println("int1 % int2 = " + (int1 % int2));

4.关系运算符 >, < ,>=,<=,==,!=

// 关系运算符

int a = 50;

int b = 60;

prt.println("a = " + a);

prt.println("b = " + b);

prt.println("a > b : " + (a > b));

prt.println("a >= b : " + (a >= b));

prt.println("a == b : " + (a == b));

prt.println("a != b : " + (a != b));

prt.println("a < b : " + (a < b));

prt.println("a <= b : " + (a <= b));

5.逻辑运算符 &&,||,!

// 逻辑运算

boolean bn1 = true;

boolean bn2 = false;

prt.println("bn1 && bn2 :" + (bn1 && bn2));

prt.println("bn1 || bn2 :" + (bn1 || bn2));

prt.println("!bn1 :" + !bn1);

逻辑运算符用于连接布尔型表达式,

在 Java 中不可以写成 33 && x<6 。

短路逻辑运算符

当使用与逻辑运算符时,在两个操作数都为 true 时,结果才为 true,但是当得到第一个操作为 false 时,其结果就必定是 false,这时候就不会再判断第二个操作了。

当使用或逻辑运算符时,两个操作数,当第一个已经是 true 时,就不会再判断第二个了。

6.三目运算符 ?:

// 三目运算符

int i = 5, j = 9;

int result = i > j ? i : j; // ?号前面的表达式为真取 i,否则取 j

prt.println("result : " + result);

这整个运算符包括一个关系运算符(可以是“>”"<""!="等等),一个“?”,一个“:”,冒号前后需要有两个表达式或者是值或者是对象。

7.字符串连接符 + 用于拼接字符串

//String

String address1 = "Anhui";

String address2 = "Hefei";

int code = 5;

String ret = address1 +" "+ address2 +" "+ code+" 号";

prt.println("ret :" + ret);

8.数据类型转换操作符 () 用于转换数据类型

//类型转换

int num = 1000;

short shot;

shot = (short) num;

prt.println("shot : " + shot);

9.递增递减运算符 ++, --

//递增递减运算符

int age = 6;

prt.println("age = " + age);

age++; //先使用后 ++

prt.println("age++: " + age);

age--; //先使用再递减

prt.println("age--: " + age);

++age; //先自增再使用

prt.println("++age: " + age);

--age; //先递减再使用

prt.println("--age: " + age);

10.逗号操作符

11.扩展赋值运算符 +=,-=,/=,*=,%=

//int1 +=int2;

prt.println("--------------------------------");

prt.println("int1 +=int2 :" + (int1 +=int2));

prt.println("int1 -=int2 :" + (int1 -=int2));

prt.println("int1 *=int2 :" + (int1 *=int2));

prt.println("int1 /=int2 :" + (int1 /=int2));

prt.println("int1 %=int2 :" + (int1 %=int2));

a+=b 等价于 a=a+b

12.位操作符/移位操作符

Java 定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。

位运算符作用在所有的位上,并且按位运算。假设 a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100 B = 0000 1101 ----------------- A&b = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011

| 操作符 | 描述 | 例子 |
| & | 如果相对应位都是 1,则结果为 1,否则为 0 | (A&B),得到 12,即 0000 1100 |
| | | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到 61,即 0011 1101 |
| ^ | 如果相对应位值相同,则结果为 0,否则为 1 | (A ^ B)得到 49,即 0011 0001 |
| 〜 | 按位补运算符翻转操作数的每一位,即 0 变成 1,1 变成 0。 | (〜A)得到-61,即 1100 0011 |
| << | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2 得到 240,即 1111 0000 |
| >> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2 得到 15 即 1111 |
| >>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2 得到 15 即 0000 1111 |

  >> :若符号位为正,则在最高位插入 0;若符号位为负,则在最高位插入 1

  >>> :无论正负,都在最高位插入 0

14.基本数据类型和和其对应的引用类型的包装类

int ---- Integer

char ---- Character

byte ---- Byte

short ---- Short

long ---- Long

float ---- Float

double ---- Double

boolean ---- Boolean

规律总结:

A.除了 int 和 char 外,基本类型的首字母大写就是其对应的引用类型的包装类;

B.基本数据类型和其包装类之间,可以自动实现装箱和拆箱操作;

15.数据类型之间的转换,比如:String 类型和 Integer 类型之间的转换思路:

A.可以先查看 String 类有没有提供转换为目标类型的方法,有则使用;

B.String 类型若没有,检查目标类型有没有提供从 String 类型转换为自己的类型!

16.Java 运算符优先级:

| 序列号 | 符号 | 名称 | 结合性(与操作数) | 目数 | 说明 |
| 1 | . | 点 | 从左到右 | 双目 |
|
| ( ) | 圆括号 | 从左到右 |
|
|
| [ ] | 方括号 | 从左到右 |
|
|
| 2 | + | 正号 | 从右到左 | 单目 |
|
| - | 负号 | 从右到左 | 单目 |
|
| ++ | 自增 | 从右到左 | 单目 | 前缀增,后缀增 |
| - - | 自减 | 从右到左 | 前缀减,后缀减 |
| ~ | 按位非 | 从右到左 | 单目 |
|
| ! | 逻辑非 | 从右到左 | 单目 | “!”不可以与“=”联用 |
| 3 | * | 乘 | 从左到右 | 双目 |
|
| / | 除 | 从左到右 | 双目 | 整数除法:取商的整数部分,小数部分去掉,不四舍五入 |
| % | 取余 | 从左到右 | 双目 |
|
| 4 | + | 加 | 从左到右 | 双目 |
|
| - | 减 | 从左到右 | 双目 |
|
| 5 | << | 左移位运算符 | 从左到右 | 双目 |
|
| >> | 带符号右移位运算符 | 从左到右 | 双目 |
|
| >>> | 无符号右移 | 从左到右 | 双目 |
|
| 6 | < | 小于 | 从左到右 | 双目 | |
| <= | 小于或等于 | 从左到右 | 双目 |
|
| > | 大于 | 从左到右 | 双目 |
|
| >= | 大于或等于 | 从左到右 | 双目 |
|
| instanceof | 确定某对象是否属于指定的类 | 从左到右 | 双目 |
|
| 7 | == | 等于 | 从左到右 | 双目 | |
| != | 不等于 | 从左到右 | 双目 |
|
| 8 | & | 按位与 | 从左到右 | 双目 |
|
| 9 | | | 按位或 | 从左到右 | 双目 |
|
| 10 | ^ | 按位异或 | 从左到右 | 双目 |
|
| 11 | && | 短路与 | 从左到右 | 双目 |
|
| 12 | || | 短路或 | 从左到右 | 双目 |
|
| 13 | ? : | 条件运算符 | 从右到左 | 三目 |
|
| 14 | = | 赋值运算符 | 从右到左 | 双目 |
|
| += | 混合赋值运算符 |
|
| -= |
|
| *= |
|
| /= |
|
| %= |
|
| &= |
|
| |= |
|
| ^= |
|
| <<= |
|
| >>= |
|
| >>>= |
|

其他知识:

一. 机器数和真值

在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.

1、机器数

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为 0, 负数为 1.

比如,十进制中的数 +3 ,计算机字长为 8 位,转换成二进制就是 00000011。如果是 -3 ,就是 10000011 。

那么,这里的 00000011 和 10000011 就是机器数。

2、真值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位 1 代表负,其真正数值是 -3 而不是形式值 131(10000011 转换成十进制等于 131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001 的真值 = +000 0001 = +1,1000 0001 的真值 = –000 0001 = –1

二. 原码, 反码, 补码的基础概念和计算方法.

在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.

1. 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是 8 位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以 8 位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式.

2. 反码

反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

3. 补码

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后 +1. (即在反码的基础上 +1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

参考链接:

Java运算符优先级 - zero516cn - 博客园

  • 开发
    37 引用 • 156 回帖 • 2 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 643 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 92 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 398 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 65 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 251 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6554 引用 • 29428 回帖 • 246 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1748 回帖 • 1 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 344 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 215 回帖 • 166 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 7 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1450 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    180 引用 • 447 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 462 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 23 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖 • 1 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18709 引用 • 69853 回帖 • 1 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 111 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    40 引用 • 24 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    275 引用 • 682 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 626 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 618 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 684 关注