四、常量
4.1 概述:
-在程序执行的过程中其值不可以发生改变
4.2 分类:
-字面值常量
字符串常量
整数常量:Java对整数常量提供了4中表现形式(二、八、十、十六进制);
小数常量
字符常量
布尔常量
空常量
4.3 关于进制:
4.3.1 概述:
-就是进位制,是人们规定的一种进位方法。
-规则:X进制,则表示逢X进一位;
计算机的电子元件的状态:开关
仅仅开关两个状态是不够表达我们常见的数据的:英文字母,数字,标点符号等。为了能便是更多的数据,国际化组织就规定:用8个这样的信号(开关)来表示一个数据,这个数据单位叫:字节。
后来,通过数字1,0来表示开和关;那么1个字节 等于有8位(bit)。
由这样的1,0组成的数据就是二进制数据;
单位转换:
1byte = 8bit
1k = 1024byte
1m = 1024k
1g = 1024g
1t = 1024g
4.3.2表现形式:
二进制:有这样的1,0组成的数据就是二进制。以0b开头。
八进制:Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。以0开头
十进制:由0,1,2...9组成。整数默认是十进制。
十六进制:它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。以0x开头
4.3.3相互转换:
1)二进制转化成八进制
-A.把二进制的数据,从右开始,每三位一组合,最左边不够的时候补0。
-B.分别计算出对应的十进制数值,
-C.再把每个十进制的数据组合起来,就是一个八进制。
二进制转八进制
2)二进制转化成十六进制
-A.把二进制的数据,从右开始,每四位一组合,最左边不够的时候补0。
-B.分别计算出对应的十进制数值,
-C.再把每个十进制的数据组合起来,就是一个十六进制。
二进制转十六进制
3)任意进制转化为十进制
按权求和:
系数:每一个位上的数据值本身就是系数。
基数:x进制的基数就是x
权:针对每一个位上的数据进行编号,从右边并且是从0开始编号,这个编号就是该位上数据的权值
x进制转化成十进制:每一个位上的系数*基数的权次幂 之和。
十进制转化十进制,推导出规律
按权求和的推导
4)十进制他转化其他进制
除基取余,直到商为0,余数反转;
52转二进制:0b110100
52 / 2 = 26 余0
26 / 2 = 13 余0
13 / 2 = 6 余1
6 / 2 = 3 余0
3 / 2 = 1 余1
1 / 2 = 0 余1
52转八进制:064
52 / 8 = 6 余4
6 / 8 =0 余6
52转十六进制:0x34
52 / 16 = 3 余4
3 / 16 = 0 余3
5)任意的x进制到y进制的转换?
以十进制为桥梁:
x进制 转 十进制
十进制 转 y进制
6)二进制与十进制之间的快速转换法:8421码
(一知半解,暂不考虑)
4.4 有符号的数据表示法:
4.4.1 概述:
-在计算机内,有符号数据的表示法:原码、反码、补码。
-所有数据的运算都是采用数据对应的二进制的补码进行的。
4.4.2 原码、反码、补码:
原码、反码、补码定义.png原码、反码、补码练习:
练习1练习2
五、变量
5.1 概述:
-在程序执行过程中,在某个范围内变化的量
-可以理解成变量就是在内存中的一小块区域,使用变量名来访问这一块区域,区域中的内容就是变量的值;
5.2 格式:
数据类型 变量名 = 初始化值;此格式是固定的;
5.3 关于数据类型
5.3.1 概述:
数据类型 基本数据类型及其字节数Java是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同的大小的内存空间。
5.3.2 注意事项:
A.整数类型默认值是int,浮点类型默认是double。(在运算是会把byte转换成int再运算)
B.声明long类型时,后面要加上“L”或者"l";
C.声明float类型,后加“F”或"f",否则可能损失精度,因浮点数据默认是double的。
D.默认转换:1)byte,short,char--int--long--float--double(从小字节转到大字节,避免可能损失精度)
2)byte,short,char之间不能相互转换,他们参与运算首先转成int类型;
练习:
char在转化int类型时对应一张ASCII表,其中有3个关健对应值须记住
'0'-----48
'A'-----65
'a'-----97
衍生:当字符串+其他类型时
字符串+其他类型
E.强制转换:目标类型 变量名 = (目标类型)(被转换的数据)
F.运算时直接是常量想加,查看注意A中的图的解释
5.3.3 练习
5.4 使用变量的主意事项:
A.作用域:变量定义的位置决定了他的作用域,定义在方法内,作用域就是这个方法体,定义在类中作用域就是这个类。相同的作用域中不能丁两个同名变量。
B.初始化值:没有初始化值不能直接使用。
C.在一行上建议之定义一个变量。可以多个不算错,书写不规范。
5.5 思考:
1.变量相加和常量相加的区别?答案:注意A与F
2.强制转换数据移除后的结果怎么算?答案:练习
byte,short他们接收的其实是int类型的值,它们会自己做一个检测,如果超出他们所能表达的数值范围则就报错了。byte b = 128;//就报错。
byte临界值的问题(-128~127)
byte b1 = 127;//无错
byte b2 = 128;//打印出来的是-128
byte b3 = 129;//打印出来的是-127
byte b4 = 130;//打印出来的是-126
128的二进制是10000000,-128的二进制也可以是:10000000(这个的1既是符号位也是数值位),其他类型的临界值也是这样的;
数据类型的默认转换:
byte 、char、short --int -- long --float --double
其中long是8字节,而float是4字节,为什么long还能默认转成float呢?
A.long与float的底层存储结构不同
1) long是整数类型,直接是1,08位那么存储;
2) float是浮点类型,是带小数的二进制换算,存储的是有效数字位(科学计数法)
B.float所表示的数值范围要大于long类型所表示的数值范围的;
1) long表示的数值范围:2^63-1
2) float表示的数值范围:3.410^38
3.410^38 > 210^38 > 28^38 > 22338 = 22^114 > 2^63-1
Java语言中的字符char可以存储汉字吗?
可以的,因为Java中的char是2个字节的;一个汉字是占2个字节的;Java的编码是采用Unicode编码;
float类型的数据在内存中是怎么存储的?(了解)
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
举例:17.625在内存中的存储
首先要把17.625换算成二进制:10001.101
整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。
在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 因为右移动了四位
这个时候,我们的底数和指数就出来了
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
参考书籍视频:
-学习视频:黑马程序员_Java基础视频-深入浅出精华版
-阅读书籍:Java核心技术 卷I(机械工业出版社)
API1.8
网友评论