
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明达内培训的老师今天给大家讲java的运算符。
1.1算数运算符:+,-,*,/,%
short s1 = 10;
short s2 = 20;
short s3 = s1 + s2; //报错,s1和s2做运算时会自动变为int类型
//正确的写法:
int = s1 + s2;
short s3 = (short)(s1 + s2); //常见错误题:
1.2自增自减:++,--
int a = 10;
int b = a++; b =10 a =11 //++在后先赋值后运算
int b1 = ++a; b1 =12 a =12 //++在前先运算在赋值,减减一样
1.3赋值运算符:=,+=,-=,*=,/=
常见错误题:
int a = 0;
a+=10; // a = a + 10;
short b = 10;
short c = 5;
b+=c; // b = b + c //没有问题.会转成int时再自动强转为short
//b = b+c; //下面这种写法是错误的。
1.4关系运算符:>,<,>=,<=,== ,!=
关系型运算符(比较运算符) :结果只有一种是boolean类型,要么是true(对),要么是false(错)
如果判断基本数据类型,比较的变量的两个值。
如果是比较引用类型,比较的是引用的地址值
1.5逻辑运算符:& ,| ,! ,&& ,||
&&和&区别和联系:
相同点:结果是一样的
不同点:如果用双&号判断,如果说条件一为false,不会判断条
件二,但是单&号会继续判断
||和|
相同点:结果一样。
不同点:如果用||号判断,如果说条件一为true,不会判断条
件二,但是单|号会继续判断
1.6位运算符:
它是对二进制位进行计算。
位运算符是可以对十进制的整数进行计算,计算方式:将十进制转为二进制进行计算。
二进制由0和1组成,所以计算的结果要么是0,要么是1
1位运算符的符号:
<1、& (与):两者都是1的时候我就是1,其他都是0
int a = 6;
int b = 3;
System.out.println(a&b); // 2
/*原理:
1111-1111 1111-1111 1111-1111 1111-0110 6
&
1111-1111 1111-1111 1111-1111 1111-0011 2
1111-1111 1111-1111 1111-1111 1111-0010 =2 */
<2、|(或): 两者都为0时才为0,其他的都是1
int a = 6;
int b = 3;
System.out.println(a|b); // 7
/*
1111-1111 1111-1111 1111-1111 1111-0110 6
|
1111-1111 1111-1111 1111-1111 1111-0011 2
1111-1111 1111-1111 1111-1111 1111-0111 =7
*/
<3、^(异或):两者不同为1,相同为0
int a = 6;
int b = 3;
System.out.println(a^b); // 5
/*
1111-1111 1111-1111 1111-1111 1111-0110 6
^
1111-1111 1111-1111 1111-1111 1111-0011 2
1111-1111 1111-1111 1111-1111 1111-0101 =5
*/
<4、~(取反) 0变为1,1变为0.
int a = 6;
int b = 3;
System.out.println(~a); // -7
/*
~
1111-1111 1111-1111 1111-1111 1111-0110 6
1111-1111 1111-1111 1111-1111 1111-1001 =-7
*/
如图6取反为-7,-7取反同样是6,所以个人得出结果是:正数取反变为负数再-1,负数取反变为正数也-1
负数的表现形式:二进制位的最高位为1,那么这个数就是一个负数。
/*
1111-1111 1111-1111 1111-1111 1111-1111:-1
0000 0000 0000 0000 0000 0000 0000 0000:0
-2:1111-1111 1111-1111 1111-1111 1111-1110
-3:1111-1111 1111-1111 1111-1111 1111-1101
-4:1111-1111 1111-1111 1111-1111 1111-1100
-5:1111-1111 1111-1111 1111-1111 1111-1011
-6:1111-1111 1111-1111 1111-1111 1111-1010
-7:1111-1111 1111-1111 1111-1111 1111-1001
0000-0000 0000-0000 0000-0000 0000-0111 = 7
*/
规律:正数取反变为负数-1
负数取反变为正数-1
作用:数据进行加密
如123456可以0-100和a-z26字母组成,再加上&、|、^、~等位运算符的应用
如:24845845957512317580960 --- >123456
1.7移位操作符:对二进制位进行操作
1 >> 右移
2 << 左移
3 >>>无符号右移
右移:
System.out.println(6>>1); // --->3 6/2 2*1
System.out.println(6>>2); // --->1 6/4 2*2
System.out.println(6>>3); // --->0 6/8 2*3
System.out.println(6>>4);
System.out.println(9>>1); // --->4 9/2 2*1
System.out.println(9>>2); // --->2 9/4 2*2
System.out.println(9>>3); // --->1 9/8 2*3
System.out.println(9>>4);// --->0 9/16
System.out.println(-6>>1); // -6/2 -->-3
规律:右移多少位,就用需要移动的数除以2的多少次方。
/*
左移:
System.out.println("-----这个是左移的结果----------");
System.out.println(6<<1); // --->12 6*2 2*1
System.out.println(6<<2); // --->24 6*4 2*2
System.out.println(6<<3); // --->48 6*8 2*2*2
System.out.println(6<<4); //---->96 6*16 2*2*2*2
System.out.println(-6<<2);//--->-24
规律:左移多少位,就用这个数乘以2多少次方。
*/
/*
//>>>无符号的右移
System.out.println(6>>>1); //3
System.out.println(6>>>2); //1
System.out.println(-6>>>2); // 1073741822
原理:正数的无符号右移与普通右移原理相同
*/
作用:提高运算速率。位运算是执行最快。
比如:以最快的方式计算2*8
2<<3 == 2*8 = 16
2.8、三元运算符
也叫三目运算符:
结构:
条件?条件成立执行的结果:条件不成立执行结果;
class Demo1
{
public static void main(String[] args)
{
int a = 10;
int b = 9;
int c = b++>=a ? a++ : b+a; //注意这儿的b++>=a是先执行b>=a,然后再执行b++,因为++在后先赋值在运算,这儿会经常搞错的。然后别忘了b++,再执行b+a,所以c值是20;而不是11 / 19
System.out.println(a); //10
System.out.println(b); //10
System.out.println(c); //20
//需求:Java中两个值交换的三个方法:
//1.借助中间量
int x = 10;
int y = 20;
int temp = x;
x = y;
y = temp;
//2.数值加减
int x = 10;
int y = 20;
x = x + y;
y = x - y;
x = x - y;
//3.位移运算交换
x = x^y;
y = x^y;
x = x^y;
//System.out.println(y^x^x);
//System.out.println(x^y^y);
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!