首页 > 代码库 > 自学Java-运算符

自学Java-运算符

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” 博客,谢绝转载!

自学Java-运算符