JAVA的运算符,分为四类:

算数运算符、关系运算符、逻辑运算符、位运算符

算数运算符(9):+  -  *  /  %  ++  --

关系运算符(6):==  !=  >  >=  <  <=

逻辑运算符(6):&&  ||  !  ^  &  |

位运算符(7):&  |  ~  ^  >>  <<  >>>

Java基本数据类型:

数值类型:

整型:byte、short、int、long

非整型:double、float

非数值类型:char[字符]、boolean[布尔]

一:算数运算符

注:算数运算符操作数必须是数值类型

分为一元运算符和二元运算符;

一元运算符,只有一个操作数;

二元运算符有两个操作数,运算符在两个操作数之间。

一元运算符:正‘+’负‘-’自加‘++’自减‘--‘这四个。

①”++“和”--“运算符,只允许用于数值类型的变量,不允许用于表达式中;

"++"和”--“可以用于数值变量之前或者之后;

两处使用差别:

”++“和”--“用于数值变量之前,在赋值操作中,先对被”++“或”--“操作变量值先加1或者先减1,然后在进行其他的操作;

"++"和”--“用于数值变量之后,在赋值操作中,先用被”++“或”--“的操作变量值进行其他的操作,然后在对其值加1或者减1。

     package com.numerical;  

     public class Operator {
public static void main(String[] args) {
int a = 5;
int b,c,d,f,g,h;
b = +a; //正值
System.out.println("b="+b+",a="+a);
c = -a; //负值
System.out.println("c="+c+",a="+a);
int l = 2;
d = ++l; //先l=l+1;再d=l
System.out.println("d="+d+",l="+l);
int m = 3;
f = m++;//先f=m;再m=m+1
System.out.println("f="+f+",m="+m);
int n = 4;
g = --n;//先n=n-1;再g=n
System.out.println("g="+g+",n="+n);
int o = 6;
h = o--;//先h=o;再o=o-1
System.out.println("h="+h+",o="+o);
}
}

上代码,输出结果为:

b=5,a=5
c=-5,a=5
d=3,l=3
f=3,m=4
g=3,n=3
h=6,o=5

注:一元运算符和前后的操作数之间有空格,可能在有些编译器下编译时会出错。

2.二元运算符,加'+'减'-'乘'*'除'/'求余'%'

在算数运算符中,”+“,”-“,”*“,”/“完成加减乘除四则运算,%是求两个操作数相除后的余数。

运算规则和数学运算基本相同,在算数运算中,计算时按照从左向右的顺序计算,乘除和求余优先于加减,不同的是,程序中的乘运算符不可省略,在数学中可写为”y=2x“而程序中必须写为”y=2*x“。

当二元运算的两个操作数的数据类型不同时,运算结果的数据类型和参与运算的操作数的数据类型中精度较高(或位数较长)一致。

 1 int a = 3;
2 double b = 3.53;//或者3.53d
3 float c = 1.7f;
4 int d = 1;
5 System.out.println("int /int :a/d="+a/d);
6 System.out.println("double/int:b/a="+b/a);
7 System.out.println("float/int:c/a="+c/a);

输出结果为:

int /int :a/d=3
double/int:b/a=1.1766666666666665
float/int:c/a=0.56666666

转换原则:
    从低精度向高精度转换byte 、short、int、long、float、double

低精度到高精度会自动转换,而高精度到低精度则要类型强制转换。

int a = 7; double b = 5.33; b = a; a = (int) b;

计算机的数据长度:

位:一个二进制数据0或1,是1bit(位);

字节:存储空间的计量单位,是1byte = 8bit;如数据库的VARCHAR为字节;

 boolean 类型变量的取值有:ture、false,1字节(8位)
char数据类型有:unicode字符,16位
byte:一个字节(8位)(-128~127)(-2的7次方到2的7次方-1)
short:两个字节(16位)(-32768~32767)(-2的15次方到2的15次方-1)
int:四个字节(32位)(一个字长)(-2147483648~2147483647)(-2的31次方到2的31次方-1)
long:八个字节(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
float:四个字节(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方,e-45是乘以10的负45次方)
double:八个字节(64位)(1.797693e+308~ 4.9000000e-324)

对应java的基本数据类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long

注意:
①数值计算中语法现象——“晋升”,即:byte、short和char(低于int的数据类型)进行算术运算后,结果会自动提升成int类型;
②两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换;
③算数运算可以加入小括号"()"提高优先级,优先小括号内运算,再其他运算符运算;
④算数运算前操作数变量必须赋值,反之,报语法错误。

二:关系运算符

关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。

等于'=='不等于'!='大于'>'大于等于'>='小于'<'小于等于'<='

以下代码为:

     System.out.println("9.5<8 :"+(9.5<8));
System.out.println("8.5<=8.5:"+(8.5<=8.5));
System.out.println("a~z:"+((int)'a')+"~"+((int)'z'));
System.out.println("A~Z:"+((int)'A')+"~"+((int)'Z'));
System.out.println("'A' < 'a':"+('A' < 'a'));//字符'A'的Unicode编码值小于字符'a'

输出结果为:

9.5<8 :false
8.5<=8.5:true
a~z:97~122
A~Z:65~90
'A' < 'a':true

注: boolean类型只能比较相等和不相等,不能比较大小;

>=的意思是大于或等于,两者成立一个即可,结果为true,<=亦如此;

判断相等的符号是两个等号,而不是一个等号,这个需要特别小心。

实际代码中,数值、变量以及运算结果都可以直接参与比较,只是程序中为了增强可读性,有些时候需要将比较分开进行书写。

比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。

三:逻辑运算符

逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。

逻辑运算的数据和逻辑运算符的运算结果是boolean类型。

 逻辑与'&&'逻辑或'||'逻辑非'!'逻辑异或'^'逻辑与'&'逻辑或'|'

逻辑运算符的真值表:

A和B是逻辑运算的两个逻辑变量;

两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。
&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。
所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。 
利用短路现象:
在程序设计时使用&&和||运算符,不建议使用&和|运算符。 
四:位运算符
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。 
位与'&'位或'|'位非'~'位异或'^'右移'>>'左移'<<'0填充的右移'>>>' 
位运算的位与'&',位或'|',位非'~',位异或'^'与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值boolean型。
下边为位&运算:
    int a = 15;   //x等于二进制数的00001111
    int b = 6;     //y等于二进制数的00000110
    int c = x&y   //z等于二进制数的00000110
二进制数的00000110
右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。
     将一个数左移"<<"会使该值乘以2的幂。
   将一个数右移>>"会使该值除以2的幂。
   右移(补零)运算符,即无符号右移,">>>"永远不会产生负号,因为其符号位总是被补零。 不论被移动数是正数还是负数,左边移进的部分一律补0。
  System.out.println(1<<3); System.out.println(8>>3);  
 
    int x = 70;   //x等于二进制数的01000110
    int y = 2;
    int z = x>>y  //z等于二进制数的00010001
    即运算结果为z等于二进制数00010001,即z等于十进制数17。

    int x = -70;  //x等于二进制数的11000110
    int y = 2;
    int z = x>>y  //z等于二进制数的11101110
    即运算结果为z等于二进制数11101110,即z等于十进制数-18。
    右移和左移操作,是整数机器数的补码表示法。

&运算符规定必须信号A和B都被充电,其结果才是充电。(1表示充电,0表示未充电)

^异或(XOR)运算符规定如果信号A或B之一被充电,但是信号A和B不是同时被充电,则结果为充电。

~运算符也称为按位求补,它翻转所有的充电状态值。

五:赋值运算符与其他运算符的简捷使用方式


① 赋值运算符可以与二元算术运算符、逻辑运算符和位运算符组合成简捷运算符,从而可以简化一些常用表达式的书写。

在程序开发中,大量使用“一元运算符或移位运算符等”该区别简化代码的书写,这样做,因为这样将增加阅读代码的难度,尽量注释。

② 方括号[]和圆括号()运算符 
 方括号[]是数组运算符,方括号[]中的数值是数组的下标,整个表达式就代表数组中该下标所在位置的元素值。
 圆括号()运算符用于改变表达式中运算符的优先级。
    String [] sa = {"a","b","c","d"};
System.out.println(sa[2]);

输出为:c ③ 字符串加(+)运算符 
当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,并连接为一个字符串。

String a ="aa";
int c = 555;
String b = a+"bbb"+c;
System.out.println(b);

输出为:aabbb555

④ 条件运算符(三目运算符)
    <表达式1> ?<表达式2> : <表达式3> 
先计算<表达式1>的值,
当<表达式1>的值为true时,则将<表达式2>的值作为整个表达式的值;
当<表达式1>的值为false时,则将<表达式3>的值作为整个表达式的值。

    int a = 55,b = 132,res;
res = a > b ? a : b;
System.out.println(res);

输出为:132

⑤强制类型转换符
强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型

     int a;
double b = 5.66600;
a = (int) b;
System.out.println(a);

输出为:5

运算符优先级表

优先级自上而下,级别由高到低。

Java的算数运算符、关系运算符、逻辑运算符、位运算符的更多相关文章

  1. c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

    1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...

  2. 003-Python3-基础语法-运行方式、代码基础要求、运算符[算数运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符、身份运算符]、运算符优先级

    一.基础语法 参看地址:https://www.runoob.com/python3/python3-tutorial.html 1.1.运行方式 1.文件方式 编写一个hello.py文件, pri ...

  3. 2017年9月22日作业 c++算术运算符 自增 自减 逻辑运算符 位运算符 条件运算符(三元运算符)

    作业1: c++算术运算符试题,分析下面程序的输出结果是什么 //第一个: int x=8999;int value=x*1000/1000; //第二个 int x=8999;int value=x ...

  4. 【Java】运算符(算术、赋值、比较(关系)、逻辑、条件、位运算符)

    运算符 文章目录 运算符 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 5. 条件运算符 6. 位运算符 7. 运算符优先级 8. 运算符操作数类型说明 9.code 算术运 ...

  5. Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)

    Java 逻辑运算符.位运算符.移位操作符  总结     作者:王可利(Star·星星) 逻辑运算符,表格如下: 解析逻辑运算符表: 1.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...

  6. PHP的按位运算符是什么意思

    按位运算符是什么意思? 按位运算符(Bitwise Operators)是用于对涉及单个位操作的位模式或二进制数字执行位操作的运算符. 按位运算符可以用于: 1.通信堆栈,其中标头中的各个位附加到数据 ...

  7. java入门---运算符&算术运算符&自增自减运算符&关系运算符&位运算符

        计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 ...

  8. JAVA算术运算符、关系运算符和位运算符

    算术运算符 1.java的算数运算符包括+(加).-(减).*(乘)./(除).%(取余),在运算过程中出现的隐式转换原则和C语言一样:2. 高位数据向低位数据转化要使用强制转化: 关系运算符 1.j ...

  9. java注释 命名 数据类型 基本类型转换 位运算符 逻辑运算符 三目运算符

    一.java注释 1.单行注释  //注释内容 2.多行注释 /*注释内容*/ 3.文档注释(可用javadoc工具生成api文档,不过我还没试过)/**文档注释*/,文档注释可以在使用的时候看见注释 ...

随机推荐

  1. VTK初学一,比较常见的错误1

      错误原因: 通常是在文件头部没有初始化 #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> V ...

  2. (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...

  3. NOSDK--SDK一键打包及统一接入的实现(前言)

    前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...

  4. Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()

    函数汇总: open().write().read().close() fopen().fwrite().fread().fclose() 一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件 ...

  5. MongoDB系列一:CentOS7.2下安装mongoDB3.2.8

    最近在又在倒腾MongoDB,把安装配置的相关命令贴出来 1.下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70- ...

  6. PHP 图片处理工具类(添加水印与生成缩略图)

    =================ImageTool.class.php================= <?php class ImageTool { private $imagePath; ...

  7. LNMP平台搭建---MySQL安装篇

    在前两篇中,安装了一个基本的Web服务器,但是只能提供静态网页查看,要做成动态网站,就必须要数据库或其他编程语言支持了,这里先介绍MySQL数据库的安装. MySQL是一个开源的数据库,在互联网行业应 ...

  8. Linux下安裝Oracle database內核參數設置

    參考:1529864.1 ************************************************** RAM                                  ...

  9. 反射 + 抽象工厂模式切换DB数据源(附Demo)

    首先,设计模式的文章源自于程杰的<大话设计模式>这本书,这本书个人感觉很适合我,看着不累,能够安安心心的阅读学习.在这里十分感谢程杰的这本书,我博文中的例子会根据书上的例子来.为了不侵犯这 ...

  10. android 教程实例系列

    用户界面部分学起来还真是无处下手哇,总不能一个控件发一篇文吧,略有点费时间啊...这个难道不是边用边学才给力吗..所以我打算从最实用的Button开始下手. 先贴几个链接,好东西: android用户 ...