java的运算符、获取键盘输入的整数、顺序和选择的流程控制语句

来源:互联网 发布:c 变量定义数组长度 编辑:程序博客网 时间:2024/06/06 07:05
昨天的数据类型转换的大小顺序中
byte-short-char-int-long-float-double
要注意,float虽然只占用4个字节,long占用8个字节,但是float还是排在long前面,是由于float
的数值范围比int要大,这是由于数据类型的存储结构不同导致的。对于浮点数,在存储的时候是将浮点
数转换为二进制数之后将其表示为科学计数法之后再分别存储其数值位和指数位。细节可以参阅浮点数的存储的文档
而且浮点数的数值范围是远远大于long的,long的数值范围是-2^63~2^63-1。


字符串无论跟谁一起运算,结果都是字符串


一、运算符 
对常量和变量进行操作的符号
有 算数运算符 赋值运算符 逻辑运算符 比较/关系运算符 位运算符 三目运算符
算数运算符:
整数相除只会得到整数,这个仍然是之前的数据类型转换的原则,所以需要其中一个运算的数值转换为
浮点数进行计算比如:3f/4 或3.0/4
加  减  乘  除  取余 自增1 自减1
+     -     *     /      %    ++       --


+号的作用:加法 正号 字符串连接符
注意字符串连接字符串和其他数据类型的运算,不是用于字符和其他数据类型的运算哦,
字符与数值进行运算的时候,按照之前的数据类型转换规则转换成int进行数值运算。


=赋值运算符
可以进行连续赋值
x=y=a=b=...


扩展赋值运算符+= -= /= *=
short s = 1;
//这行语句是有问题的,会因为将int赋值给short报精度损失的错误
s = s+1;
//但是s+=1;是可以的,因为扩展的赋值运算符隐含强制类型转换
s+=1;
//所以扩展的赋值运算符 s+=1 不等价与  s= s+1,而是等价于 s = (s的数据类型)(s+1)
例如:
byte b = 1;
b +=127; //结果会是-128,由于相加后的结果超过了byte的数值范围,在强制类型转换之后损失了精度


==比较运算符不要误写成=赋值运算符


逻辑运算符
非  与  与(短路) 或  异或  或(短路)
!  &   &&   |   ^    ||
逻辑运算符用来连接boolean类型的表达式或者值,表达式在java中意思是用运算符把常量或者变量连接起来
的复合java语法的式子,用的什么运算符相应的也就叫做什么表达式,比如 a+b 算数表达式 a=b赋值表达式 
a>b比较表达式
^异或当连接的两个值或表达式为不同的值时为true其余为false
true^false == true false^true==true
需要注意的&与& |与||的区别
在结果上&& ||与& |是相同的,但是如果&& ||的左边的表达式或者值已经可以确定整个逻辑运算符的结果的时候
右边的表达式就不会执行了,比如
int x = 3;
int y = 2;
x == 4&& y++ == 2;
由于x == 4已经为false ,这个时候已经可以确定这行逻辑表达式的最终值为false了,于是右边的 y++ == 2不会去判断
也不会去执行y++了,所以y的值仍然会是 2
但如果使用单个&逻辑运算符
x == 4 & y++ == 2; 这个时候仍然会去判断右边的表达式的结果并计算右边的表达式,所以右边的表达式仍然会
执行,y的最终值是3


位运算符 
<< >> >>> & | ^ ~
&|^这3个运算符既是逻辑运算符也是位运算符,当运算连接的2边都是数值的时候,它就是位运算符
要从字面上理解位运算,首先要将要运算的数值转换为二进制数的形式,然后将1当做true、将0当做false
然后仍然按照以前的规则来运算即可


^有个特点,一个数据对另一个数据异或2次,该数本身不变!(a^b^b)==a
一个数据先与另一个数据异或再与本身交换则变为另一个数据 (a^b^a) == b
以下是对上述应用的灵活运用:
在不借助新变量的同时交换 a b两个整数的值
int a =10;
int b =20;
答案: a = a^b;
b = a ^ b; // a ^ b ^ b
a = a ^ b; // a ^ b ^ a


当然说到交换两个变量的值,这里可以涉及到多个方法,顺带提一下
第一种,也是最基本的一种,也就是借助第三个变量
int a = 10,b = 20;
int c;
c = a;a = b;b =c;
除以上两种外还顺带多提2种方式
1.
a = a+b;
b = a-b;//b已经为a了
a = a-b;//a+b-a
2.
a = a+b=(a=b);
直接一条语句搞定


>> << >>>分别是右移 左移 无符号位右移,将数值转换为二进制数之后进行相应的移位,要注意的是转换为
二进制数之后,还只是原码,还要转换为补码之后再进行移位计算!记住计算机中操作的都是数值的补码!
对于正数而言,反正原码反码补码都是一样的,那倒没区别,但是对于负数是不一样,负数的补码是原码符号位
不变,数值位取反加1!


练习题:
以最有效率的方式写出2乘以8的结果
2<<3


二、键盘录入数据步骤

1.导包,说白了导入文件夹
import java.util.Scanner 写在class上面
2.创建键盘录入对象,
Scanner sc = new Scanner(System.in)
3.录入数据并赋值给变量,接收一个int类型的数据,也就是只能录入整数值
int x = sc.nextInt();


三、流程控制语句:
顺序结构 选择结构 循环结构
选择结构 if switch
if: 
if(关系表达式){}
if(关系表达式){}else{}
if(关系表达式){}elseif(关系表达式){}elseif(){}...else{}
当if()后面的语句只有一条语句的时候,可以省略{}大括号,当然,建议是不管几条语句都不要省略
注意
if(关系表达式); {...}
上面的语句中{}中的语句不论关系表达式是否为真都会执行,在if()后面加了个;,而分号表示一条语句的结束
if()后面连接的一个分号其实意思是跟一个“空”语句,就是什么也不做的语句,而后面的{...}其实已经不属于
前面的if的流程控制的范围了。


程序测试的时候要考虑到:正确数据 边界数据 错误数据

比如说利用if来判断成绩分数的等级的时候,规定0-60分是不及格,60-100是及格,那么我们在测试的最起码要测试正确数据 0-100中的数值,0 60 100这3个边界数据,-20 300这一类的错误数据

1 0
原创粉丝点击