JAVASE-02:常量、变量、运算符和数据类型转换方式
1.常量
程序执行过程当中 其值不发生变化的量,在java中分为字面值常量和自定义常量
字面值常量–
整数常量 -- 100 200 3
小数常量 -- 3.123 4.21
布尔常量 -- true false
字符常量 -- 被单引号 所括起来的单个字符 'a' '1' 'A'
字符串常量 -- 被双引号所括起来的单个或多个字符 ”a“ ”asd“ ”你好“ ”hello world“
空常量 -- null
2.进制
国际组织规定8个开关位为一个字节 1byte=8 bit
1kb=1024byte 1M=1024kb …
由 1 、0 组成的数据称之为2进制数据,但是对于描述数据表现形式过长,对其进行优化
8进制: 把2进制数据每3位分一组,不够的补零,然后把每一组数据换算为十进制,拼起来就是8进制数据
16进制: 把2进制数据每4位分一组,不够的补零,然后把每一组数据换算为十进制,拼起来就是16进制数据 (由0–9 a–f组成)
进制越大数据表现形式越短
为了区分不同进制数
有符号数据表示法:符号定位法–符号位区分正负 0-正数 1-负数;计算机做底层运算,采用补码来运行,正数的原码 反码 补码是一样的;负数的反码是其他位取反,符号位不变
原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码: 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码: 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
符号位 | 数值位 | |
---|---|---|
原码 | 1 | 0000111 |
反码 | 1 | 1111000 |
补码 | 1 | 1111001 |
练习:
A:已知原码求补码:已知某数X的原码为 0B 1 0110100,试求X的反码,补码。
0B 1 0110100
反码 0B 1 1001011
补码 0B 1 1001100
B:已知补码求原码:已知某数X的补码 0B11101110,试求其原码。
0B 1 1101110
反码 0B 1 1101101
原码 0B 1 0010010
3.变量
在程序执行过程中其值可以发生变化的量,其实就是在内存中开辟的一小块空间可以用来存储数据
对于变量我们对其有一定的约束,约束他的范围和取值类型–通过数据类型
java中的数据类型:基本数据类型和引用数据类型
基本数据类型:整数型 浮点型 布尔型 字符型
**整数型**
byte--占一个字节(8bit) 所代表整数范围 (-128 ~ +127)
short--占两个字节(16bit) (-2^15 ~ 2^15-1)
int--4个字节(32bit) (-2^31 ~ 2^31 - 1)
long--8个字节(64bit) (-2^63 ~ 2^63 - 1) (L)
**浮点型**
float--占4个字节 (-3.403*10^38 ~ 3.403*10^38) (F)
double--占8个字节 (-1.798*10^308 ~ 1.798*10^308)
**布尔型**
boolean--占1个字节 只占两个值 true false
**字符型**
char--占两个字节 (0 ~ 2^16 - 1 = 65535)
Java中的字符可以存储一个中文汉字 Unicode编码中的每个字符占用两个字节
定义变量格式: 数据类型 变量名=值;
整数默认是int类型的 , 浮点数默认是 double类型的
注意事项:
1.在同一个作用域里面不能定义两个同名变量(作用于指同一对大括号所括起来的范围);
2.变量必须赋值才能使用;
3.一行也可以定义多个变量;
4.为什么byte的取值范围是-128~127:-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的),使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127]。
4.数据类型的转换机制
4.1 java中的数据类型的隐式转换:
当byte short char参与运算时,会自动提升为int类型;
如果还有long float double参与运算,则会相应的提升为long float double类型;
byte short char他们三个之间不参与转换,boolean不参与数学运算。
4.2 **强制类型转换:**原理-把多余字节丢弃掉,保留目标数据类型的字节,有可能会发生精度损失,不建议使用。
4.3 **常量优化机制:**当多个常量参与运算时,会先计算他们的结果在不在这个数据类型的范围内,如果在就报错,如果不在就报错。
4.4 整数默认是int类型,小数默认是double类型。
4.5 char可以表示一个中文 占两个字节 GBK码表一个汉字占两个字节 UTF-8码表 一个汉字占3个字节。
4.6 **字符类型提升:**字符参与运算时会查找该字符在ASCII码表中的十进制值
’a’=97 ‘A’=65 ‘0’=48 其余往后推(空格也是字符)。
4.7 字符串 “ ” 的拼接:+加号 一种作用就是我们数学中的相加作用,在代码中还有一种拼接符的作用。当+号的运算两段,只要任意一端是字符串,那么就会起拼接符的作用,将两端内容拼接起来形成一个新的字符串
5.运算符
对常量和变量进行操作的符号-数学运算符 比较运算符 逻辑运算符 位运算符 三元运算符
5.1 数学运算符 + - * / ++ – %
/除 两个整数形相除,结果取商
++自增1 --自减1 单独使用时放在前面或者后面没有区别,
++/–在后 先使用再自增 ++/–在前 先自增再使用
5.2 赋值运算符 = ,+= ,-= ,*= ,/= ,%=
= 把右边的赋值给左边, b+=10等价于b=b+10, +=等赋值运算符会自动强制类型转换
5.3 比较运算符 <, >, ==, <=, >=, !=, instanceof 比较运算符的运算结果是布尔类型