一、 计算机进制转换:二进制、八进制、十进制、十六进制互转
计算机系统数制概述
-
-
- 数制是一组固定的符号和统一的规划来表示数值的方法;
- 计算机底层使用的数制是二进制;
- 用Java编程实用的是十进制。Java底层仍使用二进制;
- 计算机常用的数制还有八进制和十六进制;
-
十进制的基本数字0~9,逢十进位。
10称做“基数”,10^n(10的n次幂)被称作“权”。
二进制的基本数字是0、1,逢2进位。
二进制的基数为2,权为2^n(2的n次方)。
十六进制基本数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十六进位
十六进制是二进制的简写,方便专业人员书写二进制数据。
16进制的基数是16,权为16^n(16的n次方)
在Java代码中十六进制用0X或0x做前缀(0是数字,不是字母)。
示例:5E十六进制=5*16^1+14*16^0 = 80+14 =94;
二进制转换成十六进制 规则: 四位二进制数相当于一位十六进制数。
十进制数转换二进制:规则:不断除以2,保留余数,商为0时不再除2.
十进制数转换十六进制:规则: 不断除以16,保留余数,商为0时不再除16.
二、变量与数据类型
1、概述
Java 定义了基本数据类型、引用数据类型和自定义数据类型;
2、栈空间
-
-
- 栈空间存取数据的效率高;
- 栈中的数据按“先进后出”的方式管理;
- 栈空间存储空间较小,不能存放大量的数据;
- JMV将基础数据类型的数据存放在栈空间;
-
3、堆空间
-
-
- 堆空间存取数据的效率最低;
- 数据存放的位置随机分配;
- 堆空间存储数据的空间大,能存放大容量的数据;
-
三、变量的定义和变量使用的原因
变量:可变的量;
常量:不可变的量;
字面量:Java的变量和常量中存放的具体数据成为字面量;
计算机的高级语言普遍使用变量来管理内存中存储的数据。
变量管理引用类型的数据:
四、变量的命名、定义和初始化
1、变量的命名
-
-
- 首字母是英文字母、$或下划线,由字母、数字、下划线组成;
- 变量的命名遵循见名知义的原则。
- Java变量名建议不用中文。
- 变量名首字母不用大写字母。
- 用驼峰命名法命名多个单词组成的变量名。eg:sumScore
- 变量名不要使用Java关键字。
-
2、变量的定义
定义变量:每个变量必需属于一种类型。
类型 变量名1,变量2,…,变量n;
e.g: byte score; //保存单科分数
short age; //保存年龄
int sumScore; //保存总分
3、变量的初始化
赋值 =
e.g: age = 18;
score = 60;
sumScore = 600;
五、变量的作用域
1、java用一对大括号作为语句块的范围,称为作用域。
2、作用域中的变量不能重复定义。
3、离开作用域,变量所分配的内存空间将为JVM回收。
六、基础数据类型的包装类
Java为基础数据类型提供了对应的类,这些类称作包装类,如下图
1、包装类中封装了一些很实用的方法和常量。例如:Byte.MIN_VALUE是Byte类中的一个常量,存放了byte类型数据的最小值。
2、包装类在集合中用来自定义集合元素的类型。
3、使用包装类
Integer.MIN_VALUE: int类型的最小值:-2^31
Integer.MAX_VALUE: int类型的最大值:2^31-1
int Integer.parseInt(String sInteger);
作用:将字符串类型的整数转换为int类型的数据。
String Integer.toBinaryString(int value);
作用:将十进制数转化为二进制,返回结果String类型。
String Integer.toHexString(int value);
作用:将十进制数转换为十六进制,返回结果String类型。
七、二进制补码
1、概述
计算机系统的内部一二进制形式存储数据。
在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是是进制。
2、补码规则
-
-
- 在计算机系统中,数值一律用二进制的补码来储存。
- 二进制的最高位是符号位,0表示正数,1表示负数。
- 正数的值是其本身,负数的值是最高位(符号位)不变,其它位逐位取反,再加1.
- 两数相加,若最高位(符号位)有进位,则进位被舍弃。
-
3、为什么使用补码
-
-
- 可以将符号位和其他位统一处理。
- 最高位不再表示数值,而是作为符号位,正好将数值折半,即一半是0至正数,一半是负数。eg :4位 二进制数共有16个数,用补码表示,则一半是0~7,一半是-1~-8. 8位 二进制数共有256个数,用补码表示,则一半是0~127,一半是-1~-128.
-
-
-
- 减法也可按加法来处理。
-
4、补码运算的特征
-
-
- 计算机中正数和负数的关系是取反加一。
- 补码运算是封闭的:运算结果保留在补码范围之内,超范围就溢出。
- 4位二进制补码最多能表示2^4(16)个数,数的范围是-8~7.
- 8位二进制补码最多能表示2^8(256)个数,数的范围是-128~127.
- 16位二进制补码最多能表示2^16(65536)个数,数的范围是-32768~32767.
- 32位二进制补码最多能表示2^32个数,数的范围是-2^31~2^31-1.
-
5、补码运算的原理
正数+负数 = 模
模:某种类型数据的总数,例如:
4位二进制的模是2^4=16
因此,负数=模-正数,这就是逐位取反加1的原因。
八、整数、浮点、字符类型
1、整数类型
-
-
- Java有四种整数类型:byte、short、int、long。
- Java默认整数计算的结果是int类型。
- 整数的字面量是int类型。
- 若字面量超过int类型的最大值,则字面量是long类型,那么后面要用L(或l)表示该值是long类型。eg: long longValue = 300000000L
-
2、浮点类型
-
-
- 浮点类型用于表示小数的数据类型。
- 浮点数原理:也就是二进制科学计数法。
- Java的浮点类型有float和double两种。
- Java默认浮点类型计算的结果是double类型,字面量也是double类型。若要给float类型的变量赋字面量的值,则要在字面量后面加F(或f)。eg : float f=5.3;将会出现编译错误,正确的赋值是:float f=5.3f;
-
浮点数科学计算法:
-
-
- 十进制浮点数科学计数法:219345=2.19345*(10^5)
- 二进制浮点数科学计数法:10111=1.0111*(2^100)
-
float类型:
-
-
- float类型共32位,1位为符号位,指数8位,为数32位。
- float的精度是23位(即能精确表示23位的数,超过就被截取了)。小数是以尾数长度来表示精确度的,比如pi=3.1415的精度是4位。
- float存储数据的范围大于int类型,但精度比int要小,因为int的精度是31位。
-
double类型
-
-
- double类型,1位符号位,11位指数,52位尾数。
- double范围远远大于long,但double精度不如long(long存储数据的位数是63位)。
-
浮点运算的特点:
浮点运算就是实数运算,由于计算机智能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差。
3、字符类型
-
-
- char类型的字面量可以是一个英文字母、字符或者一个汉字,并且由单引号包括。eg:’A’.
- Java底层使用一个16位的整数来处理字符类型,该数值是一个字符的unicode编码值。
-
unicode编码:
-
-
- unicode编码是全球范围内的编码方法。
- unicode编码的英文部分与ASCII码兼容(ASCII表示范围0~128),同时英文字符和数字是连续编码的。
- Java在处理char类型的数据时,在底层是按unicode码来处理的。
-
编码:
计算机硬件系统智能用0和1表示数,我们人为地做了规定,某个数还可以表示一个字符。eg:65表示A。
参考:极客学院课程 http://ke.jikexueyuan.com/zhiye/javaweb/