23天学习Java编程(第三天:运算符)
局部变量:
1)定义在方法的里面
2)必须先赋值后使用
3)作用域:声明点到方法的右半个花括号
实例变量:
1)定义在类的里面方法的外面
2)可以不用初始化直接使用(有默认值)
3)作用域:类的内部
作用域:指标识符可以使用的有效范围
可见性:指标识符可以被访问、引用的范围
作用域内不一定可见,但可见一定在作用域内
编译错误
1)查看报错信息,定位错误所在
2)通过添加、删除程序法,缩小错误范围(注释)
运行错误
任意进制到十进制的转换
1:任意进制到十进制的转换原理
系数:就是每一位上的数据
基数:X进制,基数就是X
权:在右边,从0开始编号,对应位上的编号即为该位的权
结果:把系数*基数的权次幂相加即可
2:练习
十进制–十进制
二进制–十进制
八进制–十进制
十六进制–十进制
十进制到任意进制的转换
1:十进制到任意进制的转换原理
除积倒取余
2:练习
十进制–十进制
十进制–二进制
十进制–八进制
十进制–十六进制
原码反码补码
1:为什么要学习原码反码补码?
后面要学习位运算、强制类型转换,如果不知道有原反补会看不懂结果
2:有符号数据表示法的几种方式
原码
就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
通过一个字节,也就是8个二进制位表示+7和-7
0(符号位) 0000111
1(符号位) 0000111
反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
11111000(-7)
补码
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
11111001(-7)
注意:计算机中,数都以补码的形式存放,
正数的补码是其本身,负数的补码是其绝对值取反加1;
如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码
如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1
运算符:
左值 = 右值
int a = 10;
a += 10;//a = a + 10;
…
10 = a;
String s = “hello”;
a = s;
1)数据类型要匹配
2)左值只能是变量
3)复合赋值运算符会将右值的类型隐式地转换为左值的类型,可能会造成数据损失
学生类
人类
学生类 s = …
instanceof:判断对象是否是某一类类型;不能操作基本数据类型
==对于基本数据类型,判断值是否相等;对于类类型,判断地址是否相同
int a = 12; a << 2;
左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。
其实,向左移n 位,就相当于乘上2的n次方
右移运算符用符号“>>>”表示,逻辑右移,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n位,就相当于除上2 的n次方。
带符号的右移运算符用符号“>>”表示,算数右移,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1
&:与0相&,将某位清零
|:与1相|,将某位置一
:与1相,将某位反转
0&0 = 0
0&1 = 0
1&1 = 1
0|0 = 0
0|1 = 1
1|1 = 1
0^0 = 0
0^1 = 1
1^1 = 0
~0 = 1
~1 = 0
&&:逻辑运算符,具有逻辑短路功能(连接的两个条件,如果第一个条件为假,后面的条件不进行运算)
&:位运算符,但可以连接连个条件,但没有短路功能
三目运算
value1?value2 :value3
基本数据类型转换
1)隐式类型转换:位宽度窄的,向位宽度宽的转换
int a = 10;
long b = a;
2)显示类型转换(强制类型转换):位宽度宽的,向位宽度窄的转换
int a = 10;
short b = (short)a;
类类型转换:
1)隐式类型转换:子类向父类类型转换
String s = “hello”;
Object o = s;
2)显示类型转换:父类向子类类型转换
Student s;
Person p;
p = (Person)s;
练习:
1)交换两个数
int x =5,y=10; //定义两个变量
x = x^y;
y = x^y; //y=(xy)y
x = x^y; //x=(xy)x
System.out.println(“x=”+x+“y=”+y);
^的特点:一个数据对另一个数据位异或两次,该数本身不变。
2)(int)(char)(byte)-1
111111111111111111111111
1111,1111 byte
1111,1111,1111,1111 char
0000,0000,0000,0000,1111,1111,1111,1111 int
类型转换时,有符号数采用符号扩展,无符号数采用0扩展