1.byte值的问题:
byte b1=127;
byte b2=(byte)128; //-128
byte b3=(byte)129; //-127
byte b4=(byte)130; //-126
byte的范围:-128 ~ 127,
128:10000000
-128:10000000(这里1既是符号位,也是数值位)。
2.数据类型转换之默认转换:
只要参与运算就会被提升为int。
byte、short、char -- int -- long -- float -- double,
long:8字节,float:4字节。
它们的底层存储结构不同,浮点数转成小数的二进制去运算,
17.625换算成二进制10001.101,
整数部分,除以2,直至商为0,余数反转,
小数部分,乘以2,直至乘为0,进位顺序取。
在将10001.101右移,直至小数点签只剩1位,1.0001101*2^4,因为右移了四位。
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。
Java语言中的字符char可以存储一个中文汉字,因为Java语言中字符占两个字节,
Java采用的是Unicode编码。
3.运算符:
运算符是对常量和变量进行操作的符号。
分类,算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符。
整数相除只能得到整数,要得到小数,只需要将操作的数据中任意一个数据变为浮点数。
x*1.0/y,既不改变数值,又能得到浮点数。
++、--运算符的使用,
单独使用,放在操作数前后效果一样,
参与运算使用,放在操作数前,先自增自减,再参与运算,放在操作数后,先参与运算,再自增自减。
int x=4; int y=(x++)+(++x)+(x*10); 4+6+60=70。
字符串连接符(+),
System.out.println("hello"+‘a‘+1); //helloa1
System.out.println(‘a‘+1+"hello"); //98hello
扩展的赋值运算符其实隐含了强制类型转换,s+=1;是不等价于s=s+1;的,
而是等价于s=(s的数据类型)(s+1);。
&前后是数字,做位运算、前后是布尔值,做逻辑运算,其它同理。
&逻辑与,|逻辑或,^逻辑异或,!逻辑非。
&&相比&具有短路作用,左边是false,右边不执行,所以程序执行效率高于&,||与|同理。
位运算符,&(有0则0)、|(有1则1)、^(同则0不同则1)、~(按位取反),<<、>>、>>>。
交换两个变量的值,
用位异或实现,a=a^b; b=a^b; a=a^b; ,
用变量相加实现,a=a+b; b=a-b; a=a-b; ,
一句话搞定,b=(a+b)-(a=b); 。
位移运算符,
<<左移,左边最高位丢弃,右边补齐0,
>>右移,最高位是0,左边补齐0,;最高位是1,左边补齐1,
>>>无符号右移,无论最高位左边是0还是1,左边补齐0。
<<,把<<左边的数据乘以2的移动次幂,>>,把>>左边的数据除以2的移动次幂,
最有效率的2*16的方式,即2<<4。
单目运算符(~3),双目运算符(3+4),
三目运算符,比较表达式?表达式1:表达式2,返回true,执行表达式1,返回false,执行表达式2。
三个数比较大小,一步搞定,
int max=(a>b)?((a>c)?a:c):((b>c)?b:c); ,
boolean flag=(m==n)?true:false; 比较两数是否相同。
4.键盘录入:
导包,import java.util.Scanner;
创建键盘录入对象,Scanner sc=new Scanner(System.in);
通过对象获取数据,int x=sc.nextInt(); 。
5.流程控制语句:
流程控制语句分3类,顺序结构、选择结构、循环结构。
本文出自 “小篆2016” 博客,谢绝转载!
原文地址:http://xiaozhuan2016.blog.51cto.com/11456010/1866448