JAVA基础2——进制运算&数据类型&变量
- 常量
- 进制转换
- 原反补码
- 变量
- 数据类型
- 数据类型转换
- 字符和字符串运算规则
常量 常量:在程序执行的过程中其值不可以发生改变
Java中常量的分类
- 字面值常量
- 自定义常量(面向对象部分讲)
字符串常量——用双引号括起来的内容
整数常量——所有整数
小数常量——所有小数
字符常量——用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号
布尔常量较为特殊——只有true
和false
空常量null
(数组部分讲解)
public class Dome1_Constant {//constant 常量
public static void main(String[] args){
System.out.println("abc123;
;
;
");
//字符串常量
System.out.println(564566);
//整数常量
System.out.println(456.456456);
//小数常量
System.out.println('abc123;
;
;
');
//''中必须放的是单个字符,10代表的是1字符和0字符
System.out.println('');
//中什么也不放,也是不可以的,因为代表不了任何字符
System.out.println(' ');
//带表空格字符
System.out.println(true);
//boolean类只有两个值,true和fals
System.out.println(false);
}
}
下面是错误提示:
文章图片
进制转换 二进制
由0,1组成。以
0b
(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)八进制
由0…7组成。以
0
开头十进制
由0…9组成。整数默认是十进制的
十六进制
由0…9,a,b,c,d,e,f(大小写均可)。以
0x
开头任意进制到十进制的转换原理
系数:就是每一位上的数据。
基数:x进制,基数就是x。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数×基数的权次幂相加即可。
十进制到其他进制转换
规律:除基取余,直到商为0,最后,余数反转就是结果。
8421快速转换法
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|
1*27 | 1*26 | 1*25 | 1*24 | 1*23 | 1*22 | 1*21 | 1*20 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
104=64+32+8=01101000
【JAVA基础2——进制运算&数据类型&变量】二进制到八进制:
从右往左,每三位一组合,左边不够用0补。
把组合后的每一位换算成十进制数据。
最后,从左往右,把结果进行组合即可。
01101000
=001
101
000
=150二进制到十六进制:
从右往左,每四位一组合,左边不够用0补。
把组合后的每一位换算成十进制数据。
最后,从左往右,把结果进行组合即可。
对应位上的数据,应该是十六进制的。
01101000
=0110
1000
=68原反补码 原码:是二进制数的有符号表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
举例 | 符号位 | 数值位 |
---|---|---|
+7 | 0 | 000 0111 |
-7 | 1 | 000 0111 |
主要原因:
- 使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。
- 另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
负数:
反码符号位不变,数值位按位取反,0变1,1变0。
举例 | 符号位 | 数值位 |
---|---|---|
+7 | 0 | 000 0111 |
-7 | 1 | 111 1000 |
举例 | 符号位 | 数值位 |
---|---|---|
+7 | 0 | 000 0111 |
-7 | 1 | 111 1001 |
- 数据类型 变量名 = 初始化值;
byte b = 10;
System.out.println(b);
- 数据类型 变量名;
变量名 = 初始化值;
使用变量
byte b;
b = 20;
System.out.println(b);
数据类型 分类
- 基本数据类型
- 引用类型(类,接口,数组)
4类8种,区别在于他们在内存中的存储空间大小不一样。
类别 | 种类 | 名称 | 占位 | 范围 | 说明 |
---|---|---|---|---|---|
整数 | 字节 | byte | 占1个字节 | -128~127 | |
短整型 | short | 占2个字节 | -215~215-1 | ||
整型 | int | 占4个字节 | -231~231-1 | ||
长整型 | long | 占8个字节 | -263~263-1 | 其后跟L或者l标示 | |
浮点数 | 单精度 | float | 占4个字节 | -3.403E38~3.403E38 | 其后跟F或者f标示 |
双精度 | double | 占8个字节 | -1.798E308~1.798E308 | ||
字符 | char | 占2个字节 | 0~65535 | ||
布尔 | boolean | 占1个字节 | 理论上是占1/8个字节,但java中没指定其大小 | true\false |
public class Dome1_DataType {
public static void main(String[] args){
//整数
byte b=127;
int i=43524;
long l=5345768342L;
//后面最好标注大写L
short s=5635;
System.out.println(b);
System.out.println(i);
System.out.println(l);
System.out.println(s);
//浮点数
float f=3242.234234234F;
//后面最好标注F or f
double d=234234.2352342342342357658;
System.out.println(f);
System.out.println(d);
//字符
char c='a';
System.out.println(c);
//布尔
boolean b1=true;
boolean b2=false;
System.out.println(b1);
System.out.println(b2);
}
}
- 作用域问题 : 同一个区域不能使用相同的变量名
- 初始化值问题 : 局部变量在使用之前必须赋值
- 一条语句可以定义几个变量
参与运算的数据类型要一致。
转换规则
- 布尔型不能参与运算
- 整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
- 容量小的类型默认转换为容量大的数据类型;
- 数据类型按容量大小排序为:
byte,short,char-
byte,short,char
之间不会互相转换,他们三者在计算时首先会转换为int
类型
- 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意
- 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
public class Dome_DataTypeConversion {//conversion 转换
public static void main(String[] args){//隐式转换
int a=8;
byte b=10;
a=a+b;
System.out.println(a);
//强制转换
int x=9;
byte y=7;
y= (byte) (x+y);
System.out.println(y);
byte b1= (byte) (120+79);
byte b2=(byte)300;
System.out.println(b1);
System.out.println(b2);
}
}
错误代码示范
public class Dome1_DataTypeConverson1 {
public static void main(String[] args){
byte x1=3;
byte x2=6;
byte x3=x1+x2;
/*1,byte与byte(或short,char)进行运算的时候会提升为int,两个int类型相加的结果也是int类型
2,x1和x2是两个变量,变量存储的值是变化,在编译的时候无法判断里面具体的值,相加有可能会超出byte的取值*/
byte x4=3+6;
System.out.println(x3);
System.out.println(x4);
//x4可以正常输出的原因是java有常量优化机制
}
}
错误提示:
文章图片
注意:
变量无法直接运算,而常量可以
因为java有常量优化机制
float为什么比long大?
long有8个字节而float有4个字节
IEEE754规定
4个字节是32个二进制位 1位是符号位 8位是指数位 23位是尾数位
00000000——11111111
0到255 其中0代表0 255代表无穷大
1到254每个指数位减去127
-126到127
long: 2 63 ? 1 2^{63}-1 263?1
float: 3.4 × 1 0 38 > 2 × 1 0 38 > 2 × 8 38 = 2 × 2 3 38 = 2 × 2 114 > 2 63 ? 1 3.4×10^{38}> 2×10^{38}> 2×8^{38}=2×{2^3}^{38}=2×2^{114}> 2^{63}-1 3.4×1038>2×1038>2×838=2×2338=2×2114>263?1
它们底层的存储结构不同。
float表示的数据范围比long的范围要大
字符和字符串运算规则
public class Dome_DataTypeConversion2 {
public static void main(String[] args){
System.out.println('a'+1);
//98,因为有ASCII码表,a字符对应的是int类型的97
System.out.println((char)('a'+1));
System.out.println("he11o"+'a'+1);
//任何数据类型用+与字符串相连接都会产生新的字符串
System.out.println('a'+1+"hello");
System.out.println("5 + 5 = " + ( 5 + 5 ));
}
}
运行结果如下
文章图片
Java语言中的字符char可以存储一个中文汉字吗?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节。所以,Java中的字符可以存储一个中文汉字
//char类型是否可以存储中文
char c='中';
System.out.println(c);
推荐阅读
- Integer常量池结合源码解析
- Java基础|Java 打印空心等腰三角形(方法2)
- gradle 每次运行都会下载依赖的解决办法
- 使用vector代替数组
- 如何获取ResultSet的行数和列数
- Java 时间戳格式化
- Java基础|Android开发——JVM、Dalvik以及ART的区别
- XML|XML报文转Map
- Java 8 时间,字符串和Long时间戳互转
- JAVA基础|JAVA基础(TreeMap键是Student值是String案例)