欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

java基础—三(运算符&选择结构if),java基础运算符

来源: javaer 分享于  点击 10063 次 点评:124

java基础—三(运算符&选择结构if),java基础运算符


        long: 8个字节

float:4个字节
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1

float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

float数据在内存中是怎样存储的:

float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:一个浮点数有2部分组成:底数m和指数e
底数部分 使用二进制数来表示此浮点数的实际值
指数部分 占用8bit的二进制数,可表示数值范围为0-255

指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。所以,float类型的指数可从-126到128

底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit科学计数法。
格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负    
E指数加上127后的值得二进制数据
M底数
举例:
17.625在内存中的存储
首先要把17.625换算成二进制:10001.101
整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。
在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位

这个时候,我们的底数和指数就出来了
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是:01000001 10001101 00000000 00000000

byte,short在定义的时候,他们接收的其实是一个int类型的值,这个是自己做了一个数据检测的,如果不在他们的范围内,就报错。

Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为java语言中的字符占用两个字节。

Java语言采用的是Unicode编码。

128:10000000

-128;10000000(这里的1既是符号位,也是数值位)

运算符

1:运算

 对常量和变量进行操作的过程称为运算。

2:运算符

 对常量和变量进行操作的符号称为运算符

3:操作数

 参与运算的数据称为操作数

4:用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。

  不同运算符连接的式子体现的是不同类型的表达式。


(1)算术运算符


A:+,-,*,/,%,++,--
B:+的用法
a:加法
b:正号
c:字符串连接符
C:/和%的区别
数据做除法操作的时候,/取得是商,%取得是余数
D:++和--的用法
a:他们的作用是自增或者自减
b:使用
**单独使用
放在操作数据的前面和后面效果一样。a++或者++a效果一样。
**参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;

赋值运算符

A:=,+=,-=,*=,/=,%=等

B:=叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。

面试题:
short s = 1;
s = s + 1;

short s = 1;
s += 1;

请问上面的代码哪个有问题?

//short s=1;s=s+1;//有问题
//short s=1;s+=1;//没有问题,扩展的赋值运算符其实隐含了一个强制类型转换类型
//s+=1;不是等价于s=s+1;而是等价于s=(s的数据类型)(s+1)
//上面代码有没有问题

比较运算符


A:==,!=,>,>=,<,<=
B:无论运算符两端简单还是复杂最终结果是boolean类型。
C:千万不要把==写成了=

逻辑运算符


A:&,|,^,!,&&,||

B:逻辑运算符用于连接boolean类型的式子

表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。

C:结论
&逻辑与:有false则false
|逻辑与:有true则true
^逻辑异或:相同则false,不同则true。
!:非true则false,非false则true

&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

位运算符



//因为是位运算,所以先把数据转换成二进制
/*
&位与运算:有0则0
|位或运算:有1则1
^为异或运算:相同则0,不同则1
~按位取反运算符:0变1,1变0
00000000 00000000 00000000 00000011
  ~11111111 11111111 11111111 11111100(补码)
 反码:11111111 11111111 11111111 11111011
 原码:10000000 00000000 00000000 00000100
*/

A:^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
B:面试题
a:请实现两个变量的交换
**采用第三方变量(开发中常用的)
**用位异或运算符
左边a,b,a

右边a^b

**一句话搞定

b=(a+b)-(a=b);

b:请用最有效率的方式计算出2乘以8的结果

2<<3

2 的二进制:       00000000 00000000 00000000 00000010

移3位:(000)00000 00000000 00000000 00010000   //16

2<<3=2*2^3;

<<把<<左边的数据*2的移动次幂

>>把>>左边的数据/2的移动次幂

三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
/*
* 获取两个数中的最大值
* int x=100;
* int y=200;
* int max=(x>y?x:y);
* System.out.println("max:"+max);
* System.out.println("----------------------");
* 获取三个数中的最大值
* int a=1;
* int b=2;
* int c=3;
  * 先比较怕a,b的最大值
* 拿最大值和w进行比较
* int temp=((a>b)?a:b);
* int max1=(temp>c?temp:c);
* System.out.println("max1:"+max1);
* System.out.println("----------------------");
*一步搞定方法
* int max2=(a>b)?((a>c)?a:c):((b>c)?b:c);
* System.out.println("----------------------");
*  比较两个整数是否相同
*  boolean flag=(a==b)?true:false;
*/


键盘录入
(1)实际开发中,数据是变化的,为了提高程序的灵活性,我们加入键盘录入数据。
A:导包
import java.util.Scanner;
位置:在class的上边
B:创建对象
Scanner sc = new Scanner(System.in);
C:获取数据
int x = sc.nextInt();


流程控制语句

(1)顺序结构 从上往下,依次执行


(2)选择结构(分支结构)按照不同的选择,执行不同的代码

(3)循环结构 做一些重复的代码


if语句
(1)三种格式
A:格式1
if(比较表达式) {
语句体;
}

执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体
如果是false,就不执行语句体

B:格式2
(比较表达式) {
语句体1;
}else {
语句体2;
}

执行流程:
判断比较表达式的值,看是true还是false
如果是true,就执行语句体1
如果是false,就执行语句体2

C:格式3
if(比较表达式1) {
语句体1;
}else if(比较表达式2){
语句体2;
}
...
else {
语句体n+1;
}

执行流程:
判断比较表达式1的值,看是true还是false
如果是true,就执行语句体1
如果是false,就继续判断比较表达式2的值,看是true还是false
如果是true,就执行语句体2
如果是false,就继续判断比较表达式3的值,看是true还是false
...
如果都不满足,就执行语句体n+1
(2)注意事项
A:比较表达式无论简单还是复杂,结果是boolean类型
B:if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
建议:永远不要省略。
C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号。
D:else后面如果没有if,是不会出现比较表达式的。
E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
(3)案例:
A:比较两个数是否相等
B:获取两个数中的最大值
C:获取三个数中的最大值(if语句的嵌套)
D:根据成绩输出对应的等级
E:根据月份,输出对应的季节
F:根据x计算对应y的值并输出
(4)三元运算符和if语句第二种格式的关系
所有的三元运算符能够实现的,if语句的第二种格式都能实现。反之不成立。

如果if语句第二种格式控制的语句体是输出语句,就不可以。
因为三元运算符是一个运算符,必须要有一个结果返回,不能是一个输出语句。

相关文章

    暂无相关文章

用户点评