1、变量:在程序的执行过程中,其值可以发生改变的量叫变量。
定义变量的格式:
1、数据类型 变量名 = 初始化值;
2、数据类型 变量名;
变量名 = 初始化值;
2、数据类型:
A:基本数据类型
整数类型: byte 1个字节 -2^72^7-12^15-1
short 2个字节 -2^15
int 4个字节 -2^312^31-12^63-1
long 8个字节 -2^63
浮点类型: float 4个字节
double 8个字节
字符类型: char 2个字节
布尔类型: boolean 1个字节
B:引用数据类型
自动类型转换:
byte,short,char在参与运算的时候会自动提升到int类型
由大的数据类型接收小的数据类型,会自动转换,不会报错。
强制类型转换
由小的数据类型接收大的数据类型,会报错,接收不了,这时候需要强制类型转换
格式:目标数据类型 目标变量名 = (目标数据类型)要转换的数值/变量
例:byte b=(byte)130
计算机运算采用补码的形式参数运算,所以需要把130换为二进制。
130的二进制为:10000010
130为整数默认为int型
130的原码,反码,补码都为 00000000 00000000 00000000 10000010
所以已知补码 10000010求原码
得反码 10000001
原码 11111110
所以结果为-126
3、运算符:
(1) 算术运算符:+,-,*,/,%
/运算取整数,若想获得小数(5*1.0/2)
++:符号在前先自增,再赋值(a=4;b=++a a=5;b=5) 符号在后,先赋值再自增;--同理。
(2) 赋值运算符:=,+=,-=,*=,/=,%=
例:a=b,把b赋值给a;
int a=10;a+=40;输出50,这里可以看作a的值增加了40再赋值给a,但不能完全当作a=a+40.
接上面 a-=10;输出40
a*=2;输出80
a/=4; 输出20
a%=3;输出2
(3) 比较运算符:==,>,<,>=,<=,!=(结果都是Boolean型,所以接收只能是Boolean变量接收)
例:int a=10; int b=20;
System.out.println("a==b"); 输出结果为false
System.out.println("a<b"); 输出结果为true
System.out.println("a<=b"); 输出结果为true
System.out.println("a!=b"); 输出结果为true
(4)逻辑运算符:&,|,^,!,&&,||
&运算左右都为真结果为true,否则false
|运算只要有一边为真结果为true
!运算使结果相反,true变false
异或(^)运算时,左右结果相同,结果为false
&&运算结果与&运算相同,执行的东西不同
||运算结果与|运算相同,执行的东西不同
&运算不管左右结果如何,两边都参加运算;&&运算时,若左边为假则右边不参加运算。
如图,当a=7,a++==7为真,左右两边都参加运算;当a=7,a++==8为假,因为a++需先赋值在自增,所以右边b++==没有参加运算,输出的b还是8
||运算同理,若左边为真,则右边不参与运算。
(5)位运算符:&,|,^,~,<<,>>,>>> (对二进制进行运算)
&运算 :二进制中和0运算结果为0,与1运算结果为原值
例:6&3
6的二进制:00000110
3的二进制:00000011
结果 :00000010
所以6&3输出的结果为2
|运算:二进制中与0运算结果为原值,与1运算结果为1
例:6|3
6的二进制:00000110
3的二进制:00000011
结果: 00000111
所以6|3的结果为7
^运算:相同二进制运算结果为0,不同二进制运算结果为1
例:6^3
6的二进制:00000110
3的二进制:00000011
结果: 00000101
所以6^3的结果为5
运算:0变1,1变0(反码)6
例:
6的二进制:00000110
运算得:11111001
已知补码 : 11111001
求反码: 11111000(负数,符号位不变)
原码:10000111
所以~6的结果为-7
<<运算:二进制左移,右边用0补齐,多余的舍弃。
例:3<<2
3的二进制:00000000 00000000 00000000 00000011
因为3是正数,原码补码反码都一样。
3的补码: 00000000 00000000 00000000 00000011
左移2位: (00)00000000 00000000 00000000 00001100 (补码)
最高位为0,所以为正数,既是补码也是原码
所以结果为 12
>>运算:二进制右移,左边最高位是0用0补齐,最高位是1用1补齐,多余舍弃。
例:24>>2
24的二进制:00000000 00000000 00000000 00011000
24为正数,原码补码反码一样
24的补码: 00000000 00000000 00000000 00011000
右移2位 : 00000000 00000000 00000000 00000110(00)
最高位为0,既是补码也是原码
所以结果为6
例:-24>>2
-24的二进制是:10000000 00000000 00000000 00011000
已知原码求补码:
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
右移2位:11111111 11111111 11111111 11111010(00) (补码)
已知补码求原码:
补码:11111111 11111111 11111111 11111010
反码:11111111 11111111 11111111 11111001
原码:10000000 00000000 00000000 00000110
所以结果为-6
运算:无符号右移,无论最高位是0还是1,都用0补齐,多余舍弃。
例:-24>>>2
-24的二进制是:10000000 00000000 00000000 00011000
已知原码求补码:
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
无符号右移2位:00111111 11111111 11111111 11111010(00) (补码)
最高位为0,所以是正数,原码反码补码一样,所以这就是最后的结果。
拓展:3<<2(12=3*2^2)
24>>2(6=24/(2^2))
(6) 三目运算符:(关系表达式)?表达式1:表达式2;
如果关系表达式为true,运算的结果为表达式1
如果关系表达式为false,运算的结果为表达式2
如图:
版权归原作者 16年义务教育 所有, 如有侵权,请联系我们删除。