2018-05-11 第五天

简介: 一、条件运算符 java 中唯一的一个三目运算符。 需要三个操作数三个表达式。   语法表达式-1 ? 表达式-2 表达式-3 ;   表达式-1 必须是一个boolean 表达式返回值是boolean值的表达式。
一、条件运算符:

java 中唯一的一个三目运算符。 需要三个操作数(三个表达式)。

 

语法:表达式-1 ? 表达式-2 :表达式-3 ;

 

表达式-1: 必须是一个boolean 表达式(返回值是boolean值的表达式)。

表达式-2,3 是java 任意的表达式,但是两个表达式的返回值的类型要兼容。

 

执行过程:

1:计算表达式-1的返回值。

2:根据表达式-1 的返回值 ,如果是true,那么就执行表达式-2 并返回该值作为整个条件表达式的返回值。

3:如果 表达式-1 的返回值 是 false,那么就跳过表达式-2 ,执行并返回表达式-3 的值。

 

 

//条件运算符

public class TestThree{

public static void main(String[] args){

// 随机得到两个随机数,[10-30],打印结果。

// 将两个随机数中比较大的值输出。

//定义区间

final int MIN = 10,MAX = 31;

int num1 = (int)(Math.random()*(MAX-MIN)+MIN);

int num2 = (int)(Math.random()*(MAX-MIN)+MIN);

int num3 = (int)(Math.random()*(MAX-MIN)+MIN);

System.out.println("num1 = "+ num1 + "\tnum2 = "+num2 + "\tnum3 = "+num3);

int max = 0;

// max = num1 > num2 ? num1 : num2;

// max = max > num3 ? max : num3;

max = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);

System.out.println("max = "+max);

}

}

 

二、 运算符优先级

规律:   1:乘除取余  优先级大于 加减

2:同级优先级 根据结合性结合。

3:小括号优先级最高。

4:一元运算符大于二元的,二元的大于三元,赋值运算符优先级最低。

 

口诀:单目算术为关系,逻辑条件后赋值。 

 

单目:单目运算符! + (负数) ++ --等

乘除:算数单目运算符* / % + -

为:位移目运算符<< >>  

关系:关系目运算符> < >= <= == !=

逻辑:逻辑目运算符&& || & | ^

条件唯一的三目运算符A > B ? X : Y

后:无意义,仅仅为了凑字数

赋值:赋值=

 

 

fb3a7760873e144af0f18b1517e3dc707164626c

 

三、 算术运算时数据类型的转换

注意:java 不支持不同类型的数据之间的运算。

 

如果是不同类型的数据进行运算,那么编译器会对不同的类型的数据进行类型的统一的转换。转换为统一类型之后才能做运算。

 

自动类型转换的规则:因为这种转换是安全的。

1:如果操作数 的类型 是 byte,char ,short ,int 中的一个或者几个。那么这些操作数的类型要被自动转换为 int 类型然后再做运算。结果也是int。这种转换不会修改数据的大小,只是数据使用内存空间的大小的变换。

2:如果操作数 的类型 是 byte,char ,short ,int,long 中的一个或者几个,而且有long类型的数据存在。那么这些操作数的类型要被自动转换为long类型然后再做运算。结果也是long。

3:如果所有的操作数的类型中,最大的类型是float,那么所有的操作数的类型都向float转,结果也是float。

float 类型表示的范围大于 long。

4:如果所有的操作数的类型中,最大的类型是double,那么所有的操作数的类型都向double转,结果也是double。

double 类型表示的范围最大。

 

 

自动类型转换:

int 到 float,有可能损失精度。

int 到 float 可能损失精度,int 最大 2147483647, float 有效数字个数是 6-7, 会失去有效数字个数引起的精度。
float 到 int 会失去小数部分,也就损失精度了。另外, float允许数值范围大于int,超出int允许范围。

 

四、 赋值时转换

赋值的时候的类型的转换。

1:自动向上类型转换:可以将一个小类型的数据直接赋值给一个大类型的变量。因为安全。小类型向大类型自动转换,因为安全。

 

2:强制向下类型转换:

整数的强制向下;直接将高位砍掉。

浮点数 整数 强转;先直接砍掉小数点。然后再按照整数的规则砍。

强制转换不能确保是安全的。

 

public class TestChangeType{

public static void main(String[] args){

int age = 10;

byte value = 10;

int num = value;

System.out.println(num);

byte value1 = 12;

byte value2 = 10 + 23;//没有问题

// 在编译期,是不知道变量的值的。但是对于常量值,编译器是可以判断赋值 是否安全。

byte value3 = (byte)(value1 + value2);

System.out.println((short)128.349329329);//-128  1000 0000 0111 1111

}

}

 

67f12e61461199119db5412573dda3ee710593e0

字符串连接时的数据转换:

"123" + 123 :字符串和其他的类型也是不能直接连接的,其他的类型需要转换为字符串才能和字符串做连接。这个基本数据类型的数据到字符串的转换,是由底层的方法调用来完成。

 

1:

import java.util.Random;

 

/*得到一个随机字符[A-Z]or[a-z] (大小写也要随机),并打印。*/

public class TestRandomBoolean{

public static void main(String[] args){

Random ran = new Random();

//定义区间[A-Z][65-90][a-z][97-122]

final int MIN_1 = 65,MAX_1 = 90,MIN_2 = 97,MAX_2 = 122;

System.out.println(ran.nextBoolean() ? (char)(Math.random()*(MAX_1 - MIN_1) + MIN_1) : (char)(Math.random()*(MAX_2 - MIN_2) + MIN_2));

}

}

 

2:

 

import java.util.Random;

 

/*随机生成两个数,[0-100],然后输出,然后实现用一个int类型的变量num 保存两个数的算法.*/

public class TestMemory{

public static void main(String[] args){

Random ran = new Random();  

//定义区间[10-100]

final int MIN = 10,MAX = 101;

int num1 = (int)(Math.random()*(MAX - MIN) + MIN);

//获得的随机数可能为负,>>> 1 转换成 正整数;

int num2 = (ran.nextInt() >>> 1) % (MAX - MIN) + MIN;

System.out.println("第一个数 = " + num1 + "\t第二个数 = " + num2 );

int num3 = num1 << 16;

int num4 = num2 | num3;

System.out.println("存储的int型 = " + num4 );

int num5 = num4 & 0b1111111111111111;

int num6 = num3 >> 16;

System.out.println("==========================================\n解出来第一个数 = " + num6 + "\t解出来第二个数 = " + num5 );

}

}


316b531d9415e44320c6a978f1b95dbdac0f143b

目录
相关文章
|
8月前
|
程序员 C++
重生之我要学C++第五天(下)
重生之我要学C++第五天(下)
73 0
|
8月前
|
编译器 C++
重生之我要学C++第五天(上)
重生之我要学C++第五天(上)
48 0
|
8月前
|
编译器 C语言 C++
重生之我要学C++第四天
重生之我要学C++第四天
63 0
|
算法 Java
每日一题冲刺大厂第二十天 砍树
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
58 0
|
定位技术
蓝桥杯倒数七天冲刺国一之每日复习第五天
大家好,我是泡泡,今天给大家带来复习的内容,因为复习,所以一带而过啦
72 0
|
iOS开发 C++
1072 开学寄语(20 分)
下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面、理发、整衣,然后思过、读书、锻炼、明智、开悟、精进。而后必成大器也!本题要求你写个程序帮助这所学校的老师检查所有学生的物品,以助其成大器。
93 0
1072 开学寄语(20 分)
|
算法 C++
蓝桥杯十天冲刺计划
蓝桥杯十天冲刺计划
|
算法 C++
蓝桥杯每日一刷(第四天2016)
蓝桥杯每日一刷(第四天2016)
|
弹性计算 NoSQL 安全
第五天学习笔记
搭建个人Leanote云笔记本
|
弹性计算 关系型数据库 数据库连接
第四天学习笔记
使用PolarDB和ECS搭建门户网站