12_强制类型转换的结果是怎么来的
推荐:以后在使用数据的时候,尽量使用该数据类型能够表示的范围。
byte b2 = (byte)130;
数据:130默认是int类型的十进制数据。
第一步:十进制的130转换成二进制数据(130 —— 10000010)
第二步:130在内存中的表示形式,你做了截取
00000000 00000000 00000000 10000010
截取后的结果是:
10000010
第三步:二进制数据是10000010
通过观察,发现这是一个负数。
补码:1 0000010
反码:1 0000001
原码:1 1111110
最终的结果是:11111110 ——> -126
byte b3 = (byte)300;
二进制:
00000000 00000000 00000001 00101100
截取后:
00101100
通过观察,发现这是一个正数:44
13_一道关于数据类型转换的面试题
面试题:下面的语句有没有问题,如果有,请解释。
byteb1 = 3;
byteb2 = 4;
byteb3 = b1 + b2;
byteb4 = 3 + 4;
有问题,在byte b3= b1 + b2;报错。
解释:
b1+ b2在参与运算的时候,首先会自动转换成int类型。
在这个时候,b1和b2其实都被提升了类型。
所以,他们的计算结果也应该是int类型。
最终,就相当于直接把int类型赋值给byte类型,所以,会有精度损失。
byte、short、char类型的变量如果参与运算,它们的值都将被提升到int类型,它们的计算结果也将是int类型。
如果参与运算的是常量,编译器会先计算值,在看该值是否是左边能够表示的范围。如果是,就不报错。
14_ASCII码表的概述
问题:char —— int的数据关系是什么呢?
清记住三个字符的值:
'a' —— 97
'A' —— 65
'0' —— 48
数字字符、英文字符和中文字符,都是我们用于交流的数据,而计算机中的数据底层是二进制的,所以它不能直接存储我们使用的这些数据。
编码表:
就是字符及其对应的数值组成的一张表。
最常见的编码表:ASCII码表
运算符:
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符
15_算术运算符
运算符:就是把变量或者常量进行连接的符号。一般是参与运算的符号。
算术运算符
运算符
运算
范例
结果
+
-
正号
负号
+3
b = 4; -b;
3
-4
+
-
*
/
加
减
乘
除
5+5
6-4
3*4
5/5
10
2
12
1
%
取模
5%5
0
++
++
自增(前)
自增(后)
a = 2; b = ++a
a = 2; b = a++
a = 3; b = 3
a = 3; b= 2
--
--
自减(前)
自减(后)
a = 2; b = --a
a = 2; b = a--
a = 1; b = 1
a = 1; b= 2
+
字符串相加
"He"+"llo"
"Hello"
/:整数相除,结果只能是整数。
如果想要使结果为小数,那么参与运算的数据必须有一个是浮点数类型。
%:取得余数
++, --:自增自减
单独使用:
放在操作数据的前面或者后面效果一致。
参与运算使用:
放在操作数据前面,是操作数据先++,再操作;
放在操作数据后面,是操作数据先操作,再++;
+:的特殊用法
16_赋值运算符
最基本的赋值
inta = 10;
很多种赋值
a+= 20; //把左边和右边的数据相加赋值给左边。
等价于 a = a +20;
System.out.println(a);
面试题
shorts = 5;
s= s + 2; //报错
s+= 2;
System.out.println(s);
注意:
虽然a+=20和a=a+20效果等价,但是还是有些区别。
+=这种赋值运算符,其实隐含了强制类型转换功能。
也就是说:
shorts = 5;
s+= 2;
等价于
s= (short)(s + 2);
重点注意:
赋值运算符的左边必须是一个变量。
17_比较运算符
比较运算符(关系运算符):
运算符
运算
范例
结果
==
相等于
4==3
False
!=
不等于
4!=3
True
<
小于
4<3
False
>
大于
4>3
True
<=
小于等于
4<=3
False
>=
大于等于
4>=3
True
Instanceof
检查是否是类的对象
"Hello" instanceof String
True
注意:
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
运算符的优先级(从高到低)
优先级
描述
运算符
1
括号
()、[]
2
正负号
+、-
3
自增自减,非
++、--、!
4
乘除,取余
*、/、%
5
加减
+、-
6
移位运算
<<、>>、>>>
7
大小关系
>、>=、<、<=
8
相等关系
==、!=
9
按位与
&
10
按位异或
^
11
按位或
|
12
逻辑与
&&
13
逻辑或
||
14
条件运算
?:
15
赋值运算
=、+=、-=、*=、/=、%=
16
位赋值运算
&=、|=、<<=、>>=、>>>=
如果在程序中,要改变运算顺序,可以使用()。
分隔符:
“;” 表示语句结束。
空格 关键字的前后必须有空格,运算符的两端可有可无(建议有)
18_逻辑运算符基础
表达式:用运算符连接的式子(有变量、常量组成)。
a+b算术表达式
5>4比较表达式
逻辑运算符:
用于连接结果是布尔型表达式的运算。
在Java中不可以写出3<x<6,应该写成 x>3 & x <6.
运算符
运算
范例
结果
&
AND(与)
False & true
False
|
OR(或)
False | true
True
^
XOR(异或)
True ^ false
True
!
Not(非)
!true
False
&&
AND(短路与)
False && true
True
||
OR(短路或)
False || true
true
& 与,并且 有假则假
| 或,或者 有真则真
! 非,不是(针对一个表达式)
^ 异或, 相同为假,不同为真
19_逻辑运算符加强
&& 短路与 如果前面出现了false,后面将不再执行。
|| 短路或 如果前面出现了true,后面将不再执行。
开发常用:
&&,||, !
int a = 10;
int b = 20;
boolean b1 = (++a > 10);
boolean b2 = (a++ > 10);
如果++在前面,先把a变化,后再与10进行比较。
如果++在后面,先与10进行比较,后再把a变化。 |
|