Day2.01___Java中的常量
- 字符串常量 —> 用""引起来的常量叫做字符串常量
- 字符常量 —> 用’ '引起来的常量叫做字符常量,里面只能有一个数字、一个字母、一个符号。没有东西会报错,多个也会报错
- 整数常量 —> 用数字表示的常量
- 小数常量 —> 用小数表示的常量
- 空常量 —> 用null表示的常量(数组中会出现)
- 布尔常量 —> 用true和false表示的常量
Day2.02___二进制、八进制、十进制、十六进制
- 二进制 —> 用0、1来表示;表示二进制时,要在前面加上0b,其中b大小写都可以
- 八进制 —> 将8个0、1分成三个为一组来表示,从后往前,不够的在最前面添加0,八进制中最大的数为7;表示八进制时,要在前面加上0
- 十六进制 —> 将8个0、1分成四个为一组来表示,从后往前,表示十六进制时,要在前面加上0x,其中x大小写都可以,10-15的数字用字母a-f表示,大小写都可以;十六进制中最大的数为15
- 特点 —> 进制越大,表现的形式越短
- 字节表示 —> 在电脑中用8个0、1来表示一个bit(字节)
Day2.03___其他进制转十进制
- 公式:系数 * 基数 ^权次幂( 权次幂从0开始 )
- 练习
二进制转十进制:
0b100 = 1 * 2 ^ 2 + 0 * 2 ^ 1 + 0 * 2 ^ 0 = 4
八进制转十进制:
074 = 7 * 8 ^ 1 + 4 * 8 ^ 0 = 60
十六机制转十进制:
0x3c = 3 * 16 ^ 1 + 12 * 16 ^ 0 = 60
Day2.04___十进制转换成其他进制
- 公式:转成几进制就除以几,最后倒取余即可。需注意的是取余时必须除到商为0才能结束
Day2.05___进制的任意转换—8421法
1 1 1 1 1 1 1 1
12^7 12^6 12^5 12^4 12^3 12^2 12^1 12^0
128 64 32 16 8 4 2 1
- 二进制转换成十进制
0b101 = 4 + 0 + 1 = 5
解析:根据对应关系取值,比如0b101里最后边的1就对应上面最右边的1 ,依次 0b101中的0就对应上面倒数第二位1,然后再取出值相加,需要 注意的是,二进 制是由1和0组成的,如果是1就取对应的值,如果是0就 取值为0,如上面的4+0+1,找对应关系时是从右到左 - 十进制转换成二进制
80转二进制 = 01010000
解析:从左向右开始比较,首先比较80与128的大小,80<128,所以左边 第一位取0,然后再用80与64进行比较,80>64,所以取1,取完1后用 80-64=16,用得到的差再与后一位进行比较,16<32,所以后面一位取0 ,再与后面一位比较16=16,所以后面一位取1,再用16-16=0,用得到 的差与后面的数进行比较得到 差都比后面的数小,因此后面全部取0, 得到结果01010000 - 二进制转化成八进制
111100 = 4+2+1 4+0+0 = 74
解析:首先将111100分成两组,一组为111,一组为100;先看100,将最 后边的0与上面的最后边的1对应,0与倒数第二个1对应,1与倒数第三个1 对应,得到对应的数后求和,即4+0+0=4;再看111,将最右边的1与上 面最后边的1对应,中间的1与上面倒数第二个1对应,左边的1与上面倒数 第二个1对应,得到对应的数求和,即4+2+1=7。需要注意的是,分组以 后,每一组的对应都是从最后边开始,这里和二进制转十进制有些不同 - 二进制转化成十六进制
111100 = 2+1 8+4 = 3c
解析:首先将111100分成两组,一组为(00)11,一组为1100,方法与二进制转化为十六进制相同。
Day2.06___原码、反码、补码
- 在原码中,二进制的最高为表示符号,0为正,1为负,符号无论什么码都不变符号
0 0001101 原码
0 0001101 反码
0 0001101 补码
总结:正数的原码、补码、反码都是相同的 - 在原码中,二进制的最高为表示符号,0为正,1为负符号
1 0001101 原码
1 1110010 反码 —> 将原码的每一位取相反值
即原码是0,反码就取1,
取反时最高位符号位不变
0 0000001 +1
----------------------------
0 1110011 补码 —> 补码=反码+1
总结:负数的补码=原码取反+1;负数的原码=补码-1取反 - 计算机中记录的都是原码,而我们在进行数学计算时,用的时补码相加
- 已知补码为10010010,求原码?
符号
1 0010010 补码
1 0000001 -1
------------------------
0 0010001 反码
1 1101110 原码
所以原码为11101110 - 在+1时,等于2了就向前进一位,与十进制加减一样;在-1时,向前借一位,前面就得退一位,与十进制加减一样
Day2.07___隐形转换
- 当byte、short型的数据与int类型的数据进行计算时,java虚拟机会将byte、short类型的数据隐形转换成int类型
- 数据类型空间从小到大排序:
byte、short、char < int <long < float < double - 实例:
byte b1,b2,b3;
b2 = 10,b3 = 10;
b1 = b2 + b3; // (1) 会报错,损失精度
b1 = 3 + 5; // (2) 不会报错
b1 += 12; // (3) 不会报错
原因:
(1)是两个变量相加,在运算时会自动类型提升( 隐式提升 )
(2)是两个常量,两个常量相加以后为7,在byte的范围内,所以不会报错( 常量优化机制 )
(3)使用+=符号,再进行运算后会将结果自动强制进行转换为byte类型,即b1 = (byte)( b1 + 12 )
注意:+=、-=、*=、/=、%=这一类型的赋值运算符都会先 运算,再将值自动强制转换后进行赋值 - 实例:
System.out.println(‘a’); // 输出a
System.out.println(‘a’ + 1); // 输出98----->原因:隐式类型提升 - ASCII码表三个值:
(1) ‘a’ 97
(2) ‘A’ 65
(3) ‘0’ 48
Day2.08___基本数据类型在内存中的大小
- byte 1个字节 取值范围-128–127
- short 2个字节
- char 2个字节
- int 4个字节
- long 8个字节
- float 4个字节
- double 8个字节
- boolean 1/8个字节