常量:
概述:在程序的运行过程中,其值是不会发生改变的量。
分类:
字面值常量;
整数常量: 10,20,
实数常量: 12.3 21.1
字符常量: 用''括起来的一个字符
'1', '2'
字符串常量: 用""括起来的内容
"123" "abc"
布尔常量:true,false
空常量:null(面向对象的时候再讲)
自定义常量;后边讲。 final
注意:常量可以直接输出。
进制:
概述:就是一种进位制,逢几进一,就是几进制。
对于整数,咱们Java支持一下几种进制形式:
八进制: 二进制数据,从右往左,每三位一组合,然后计算出组合后的十进制值,然后把十进制的值进行拼接,就是八进制。
十进制
十六进制:二进制数据,从右往左,每四位一组合,然后计算出组合后的十进制值,然后把十进制的值进行拼接,就是十六进制。
注意:从右往左组合的时候,不够用0补齐。
JDK7以后,咱们Java支持了:二进制
计算机最基本的存储单位是:字节(byte)。
一个二进制数据是一个:位(bit)。
1byte = 8bit;
1kb = 1024byte;
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
进制的表示形式和组成:
二进制:数字0,1组成。JDK7.0以后,以0b开头。
八进制:数字0-7组成。0开头。
十进制:数字0-9组成,开头没有任何表示形式。
十六进制:数字0-9,字母a-f组成,以0x开头。
进制之间的一个转换:
其他进制转成十进制:(12345)
结果:
把 系数*基数^权次幂 相加即可。
系数:就是每一位上的数据。
基数:几进制,基数就是几。
权:把数据从右往左开始编号,并且从0开始,编号就是对应位置数据的权。
练习题:
0b100101 = 1*2^5 + 0 + 0 + 1*2^2 + 1*2^0 = 32 + 4 + 1=37
074 = 7*8^1 + 4*8^0 = 60
0xf4 = 15*16^1 + 4*16^0 = 240 + 4 = 244
十进制转成其他进制:
除基取余,直到商为0,余数反转。
60 转八
244 转十六
进制之间的一个快速转换(掌握):
8421码:
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
二进制到八进制,十六进制的转换:
基本做法:
先把二进制转成十进制,然后再转成对应的进制。
简单做法:
求八进制:把二进制数据,从右往左,三位一组合求十进制,然后拼接。
求十六进制;把二进制数据,从右往左,四位一组合求十进制,然后拼接。
有符号数据的表示形式:
我们知道,数据是有正负之分的。
原码:有符号数据的最基本表示形式。最高位是符号位,其他位是数值位。 0表示正数,1表示负数。
反码:
正数的反码和原码相同。
负数的反码和原码不同:
规则是:符号位不变,数值位取反,0变1,1变0.
补码:
正数的补码和原码相同。
负数的补码和原码不同:
规则是:反码+1
总结:
正数的原码,反码,补码都一样。
负数的不一样。
注意:
Java中只有加法,减去一个数字,等于加上这个数字的负数形式。
记忆:计算中存数的数据都是以补码形式存的。
1、已知原码(10110100),求反码,补码。
2、已知补码(11101110),求原码。
变量:
概述:
1、它就是内存中一小块区域。
2、该区域要有自己的名称(变量名)和类型(数据类型)
3、其值是可以在指定区域内不断发生变化的。
作用:
某个值可以重复使用。
格式:
数据类型 变量名 = 初始化值;
Java里边的数据类型;
基本数据类型:
数值类:
整数类型:
byte 1个字节 -128-127
short 2字节
int 4字节
long 8字节
浮点类型:
float 4字节
double 8字节
字符类型:
char 2字节
布尔类型
boolean 1个字节 这个类比较特殊,他的值只有true和false
引用数据类型;
类:class
接口:interface
数组:[]
字符串:String
定义变量并使用:
数据类型 变量名 = 初始化值;
定义变量的时候的注意事项;
1、同一对{}内,不能重复定义同一变量。
2、定义长整形的时候,数值后边必须加上l或者L。
3、定义单精度类型的时候,数值后边必须加F或者f。
4、Java语言采用的Unicode编码,一个字符占2字节。
记忆:
默认的整数类型是int,默认的小数类型是double。
java中的类型转换:
java中可以从任意的基本类型转型到其他的基本类型(boolean除外)。
自动类型转换:隐式转换
从小到大。
byte,short,char --> int --> long --> float --> double
long是8个字节,float是4个字节,为什么long的范围比float小呢?
long是整型,float是浮点型,他们再内存中的存储规则不一样,所以long的范围比float小。
格式:
跟定义变量一样。
数据类型 变量名 = 初始化值;
强制类型转换:显示转换
从大到小。
只有当我们明确可以转换的时候,才可以使用。
一般不使用。
格式:
(转换后的数据类型)变量名或者值;
类型转换的两个练习题:
byte b = (byte)130;
1、求130的原码。
00000000 00000000 00000000 10000010
2、求130的反码。
00000000 00000000 00000000 10000010
3、求130的补码,然后在补码上做截取。
00000000 00000000 00000000 10000010
4、截取后的新的补码为:10000010
5、根据第4步的补码求出它的反码。
10000001
6、求第5步的反码的原码。
11111110 ,算出的结果为:-126
面试题:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
//byte,short,char --> int --> long --> float --> double
'a'
总结:
如果是变量相加,会先提升数据类型,然后在运算。
如果是常量相加,会直接计算,然后看计算后的结果是否在其所能描述的范围内,如果在,就不报错,不过不在,就报错。
编码表:
就是字符及其对应的数值组成的一张表。
ASCII码表:
是用来描述char类型和int类型的关系的。
'a':97
'A':65
'0':48
运算符:
概述:用于连接变量或者常量的符号。一般是用来参与运算的。
算术运算符:
+,-,*,/ ,%,++,--
1、整数相除,结果是整数。 10/3*1.0
如果想要小数类型的值,参与运算的变量至少有一个是浮点类型。
2、++或者--
单独使用: ++或者--在前,或者在后,效果一致。
参与运算:效果不一致,此处以++举例(--效果类似,用法一样)
++在前: 先++,然后在运算(操作)
++在后: 先运算(操作),然后在++
作业: int i = 10;
i = i++ + ++i - i-- - --i;
int a = 10;
int b =20;
a++ +b;
3、+的用法:
A:如果连接的是两个基本类型(boolean除外),表示 相加。
B:如果连接两个变量(常量),其中一个是字符串就表示 连接的作用。
5+5+"Hello" --> 10"hello"
8+5+"hello"+5 --> 13"hello"5
赋值运算符:
=,+=,-=,*=,/=,%=
此处以+=举例:
+=:就是把等号的左边和右边相加,然后吧结果赋值给左边。
注意:+=,-=,*=,/=,%=这些形式下,等号的左边必须是一个变量。
short s = 5;
s = s + 2; //报错。 会做自动提升数据类型。提升到int
s += 2; //不会报错。 s+=2 其实隐含了强制类型转换,它相当于: s = (short)(s+2);
发这些 应该没人打我吧
比较运算符:
==, !=, > ,< ,>=,<=
比较运算符的结果都是boolean类型,要么true,要么false。
分隔符:
分号:表示语句的结束。一行可以写多条语句,但是建议一行只写一条语句。
空格:
关键字的两端都必须加空格。
运算符:可加可不加,建议加上。
注意:
不要把用==的地方,写成了=,否则结果可能不是我们想要的。
逻辑运算符:
位运算符:
条件运算符:三元运算符,三元表达式
|