您的位置:首页 > 编程语言 > Java开发

java回顾篇——进制转换,变量,数据类型的转换,运算符

2016-03-24 19:33 477 查看
1 进制的转换

进制:进制是一种记数方式 ,可以用有限的数字符号代表所有的数值。由特定的数值组成。

1.1 整型的表现形式

1. 十进制: 都是以0-9这九个数字组成,不能以0开头。

2. 二进制: 由0和1两个数字组成。

3. 八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。

4. 十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以ox开始。

1.2 进制的由来

几乎每个民族最早都使用都十进制计数法,这是因为人类计数时自然而然地首先使用的是十个手指。 但是这不等于说只有十进制计数法一种计数方法。例如,世界各国在计算年月日时不约而同地使用“十二进制”12个月为一年又如:我国过去16两才算为一斤,这就是“十六进计数法”,一个星期七天,这个就是”七进制计算法”。 计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。

如果要在计算机里面保存十进制的7.

1.2.1 十进制与二进制之间的转换

十进制转二进制的转换原理:除以2,反向取余数,直到商为0终止。

二进制转十进制的转换原理:就是用二进制的每一个乘以2的n次方,n从0开始,每次递增1。然后得出来的每个数相加

存在问题:书写特别长,不方便记忆。

1.2.2 十进制与八进制之间转换

1. 八进制的由来

二进位制在计算机内部使用是再自然不过的。但在人机交流上,二进位制有致命的弱点——数字的书写特别冗长。例如,十进位制的100000写成二进位制成为11000011010100000。为了解决这个问题,在计算机的理论和应用中还使用两种辅助的进位制——八进位制和十六进位制。二进位制的三个数位正好记为八进位制的一个数位,这样,数字长度就只有二进位制的三分之一,与十进位制记的数长度相差不多。例如,十进位制的100000写成八进位制就是303240。十六进位制的一个数位可以代表二进位制的四个数位,这样,一个字节正好是十六进位制的两个数位。十六进位制要求使用十六个不同的符号,除了0—9十个符号外,常用A、B、C、D、E、F六个符号分别代表(十进位制的)10、11、12、13、14、15。这样,十进位制的100000写成十六进位制就是186A0。

八进制的特点

10进制转换8进制原理:就是用十进制的数字不断除于8,取余数。

八进制转十进制原理: 用把进制的数不断乘以8的n次方,n从0开始,每次递增1。

除了这种方法之外,我们还有另一种方法,因为三个开关表示一个八进制数。

十进制与十六进制之间的转换

十六进制特点:由0~9 a(10) b(11) c(12) d(13) e(14) f(15)组成。

十进制转十六进制原理:就是不断除以16,取余数。

2 变量

2.1 变量的概述

1. 变量的概述

用于存储可变数据的容器。

2. 变量存在的意义

计算机主要用于处理生活中的数据,由于生活中存在大量的可变数据,那么计算机就必须具备存储可变数据的能力。

比如:

1.时间每一秒都在发生变化,根据不同的时间要有不同的处理方式。

2.气象站会根据温度发布天气预报信号。

3. 变量的特点

正常情况下牛奶盒装的都是牛奶,而且会根据牛奶的多少去决定要多大的容量的牛奶盒,A和B两位同学同时把牛奶盒放进篮子里面,但是需要区分两个牛奶盒是谁的,都需要在牛奶盒上做一个标志。

特点:

1. 必须要有大小

2. 存储一定格式的可变数据

3. 必须要有名字

2.2 变量的声明

根据上述变量的特点,所以我们声明一个变量的时候需要确定变量的大小,类型、名字三个特点:

错误: 1024byte temp = 1000000;

错误原因,java有自己的变量类型。

2.2.1 变量的数据类型

1. 整型

byte 代表一个字节的大小 8bit 2(8) -128~127 256

short 代表两个字节的大小 16bit 2(16) -2(15)~2(15)-1

int 代表四个字节的大小 32bit 2(32) -2(31)~2(31)-1

long 代表八个字节的大小 64bit 2(64) -2(63)~2(63)-1

如果一个数值没有采取特殊的处理,那么该整数默认的类型是int。

可以使用数值后面添加L或小写L改变默认的整数类型。

2. 浮点型

float 代表四个字节的大小 32bit

double 代表八个字节的大小 64bit

java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。

3. 字符型

char 代表两个字节的大小 16bit 2(16)

原理:将字符映射为码表中对应的十进制数据加以存储。

4. 布尔型

boolean 占一个字节。只有true与false两个值。

2.2.2 变量的声明

格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;

案例:

int i 声明了一个整形的变量。

double d 声明了一个double数据类型的变量

float f 声明了一个float数据类型的变量。

备注:变量名的首字母都一般都是以小写字母开始。

2.2.3 变量的初始化

2.2.4 变量的初始化方式

初始化方式1: 数据类型 变量名字 = 数值。

初始化方式2: 数据类型 变量名字 , 变量名字 = 数值。

案例:

方式1: double d = 3.14;

方式2: double d ; d = 3.14 ;

3 java数据类型的转换

Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0

1、 自动类型转换(也叫隐式类型转换)

可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。

Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)

byte b = 1; //00000001

short s = b; //00000000 00000001

int i = s;

long lon = i;

double d = lon; //1.0

自动类型转换(也叫隐式类型转换)

要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取

值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。

例如:

byte b=100;

int x=b;

System.out.println(x);//程序把b结果自动转换为int类型。

2、 强制类型转换(也叫显式类型转换)

不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。

byte b = 100;

b = b + 2;

System.out.println(b);

上述例子发生了什么,发生了类型转换。

b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为

了int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。

byte b=1;

b=(byte)(b+2);

当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int)

无法自动转换,此时就需要进行强制类型转换。

强制类型转换需要注意:

损失精度!!!

int a=128;

byte b=(byte)a;

System.out.println(b);//-128

/*

* 此时的强转已经造成了数值的不准确

*/

int

00000000 00000000 00000000 10000000

10000000

byte

再次分析此行代码

byte b = 100;

b = b + 2;

System.out.println(b);

编译:提示如下错误。

3、类型转换的原理

可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒入 2两 4两 8两的碗中。但是 4两碗的酒倒入1两碗的酒就有一些问题。

1、 什么时候要用强制类型转换

比如小数部分只想保留整数部分.

一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.

public static void main(String[] args) {

byte b = 100;

b = (byte) (b + 2);

System.out.println(b); // 102

//舍弃小数部分

double d=5.5;

int num=(int)d;

}
2、 表达式的数据类型自动提升

算术表达式,逻辑表达式

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析 System.out.println(‘a’+1)结果?

自动类型提升

byte b = 3;

int x = 4;

x = x + b;// b会自动提升为int 类型参与运算。

System.out.println(x);// 7

强制类型转换

byte b = 2;

/*

* 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b

*/

b = (byte) (b + 2);

System.out.println(b);// 4

6、System.out.println(‘a’+1)结果

美国人为了让计算机识别他们生活中的文字,让二进制表示生活中的文字.所以一个字母代表了一个二进制.,二进制也有十进制的表现形式.,把生活中的字母都用数字来标识,例如97 代表a ,98 代表 b。打印’a’就把a作为输出显示,没有疑问。但是 ‘a’+1 有加号涉及到了运算。根据java自动类型提升规则,同样道理 char 提升为int 。就把’a’代表的数字体现了出来。a 表示的是97 97+1就是98; 那么 想要查看98 表示的char 是什么 怎么实现呢 ?就要用到刚才介绍的强制类型转换了 System.out.println(char(‘a’+1));就取到了98 在ASCII码表中表示的字符。大写A 和小写a 在 ASCII有不同的表现。还有一个概念字符’1’ 在ASCII中 不是数字 1,可以运行代码查看,到此就可以明白了char 类型,char类型也是可以参与运算的,为什么可以参与运算呢。因为字符在ASCII表中都有对应的数字体现。所有的计算机兼容ASCII。

System.out.println(‘a’+1); //98

System.out.println((char)(‘a’+1)); //b

总结:

所有数值运算符都可以用在char型数据上,如果另一个操作数是一个数字或者字符,那么char会自动提升为int型,如果另一个操作数是字符串,那么字符就会和字符串相连。

4 java运算符

4.1.算术运算符

正负号(+,-)

除法

%取模

求余数

取模的正负取决与被除数:


1. 自增

(++)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式;

后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增;

备注:参与自增运算的操作数据每次会加1.


结论:

如果运算符在变量的前面,则该变量自增1或者自减1,然后返回的是变量的新值,如

果运算符在变量的后面,则变量也会自增或者自减1,但是返回的是变量原来的值。++在前就是先运算,再取值,++在后就是先取值,再运算。

自增自减运算符案例:

完成如下运算:

一;

int i = 10;

int newNum = 10 * i++;

System.out.println(newNum);//?

二:

int i = 10;

int newNum = 10 * ++i;//?

System.out.println(newNum); //?

一可以理解为

int i = 10;

int newNum = 10 * i;

i = i + 1;

二可以理解为

int i = 10;

i = i + 1;

int newNum = 10 * i;

案例一:

public static void main(String[] args) {

// 判断一个整数一奇数还是偶数

int x = -100;

// 奇数是,1,3,5…偶数是2,4,6…显然整数除2能整除,也就%(取模)结果为0就是偶数。 int result = x % 2;

System.out.println(result);

// 使用判断语句进行判断。

if (result == 0) {

System.out.println(x + “是偶数”);

} else {

System.out.println(x + “是奇数”);

}
}
方案二 使用判断该数结果是否是奇数。

(但是该算法有问题,如果被判断的整数为负数是否有效?)

public static void main(String[] args) {

// 判断一个整数一奇数还是偶数

int x = 1;

// 奇数是,1,3,5…偶数是2,4,6…显然奇数%的结果为1.

int result = x % 2;

System.out.println(result);

// 使用判断语句进行判断。

if (result == 1) {

System.out.println(x + “是奇数”);

} else {

System.out.println(x + “是偶数”);

}
}
改进

public static void main(String[] args) {

// 判断一个整数一奇数还是偶数

int x = -1;

// 奇数是,1,3,5…偶数是2,4,6…显然奇数%的结果为1.

int result = x % 2;

System.out.println(result);

// 使用判断语句进行判断。

if (result != 0) {

System.out.println(x + “是奇数”);

} else {

System.out.println(x + “是偶数”);

}
}
案例三:判断星期

public static void main(String[] args) {

// 设定今天是星期1,用int 1表示星期一,0表示星期天

int today = 1;

// 十天后是星期几?,一个星期是7天,7天之后又是星期1,可以用?

int future = (today+10) % 7;

if (future == 0) {

System.out.println(“10天后是星期天”);

} else {

System.out.println(“10天后是星期:” + future);

}
}


案例4:

int x = 1;

int y = 2;

int a = 3;

int b = 4;

int c = 5;

int result = (3 + 4 * x) / 5 - 10 * (y - 5) * (a + b + c) / x + 9* (4 / x + (9 + x) / y);

System.out.println(result); // 442

8.1 赋值运算符

= , +=, -=, *=, /=, %=

运算符 运算 范例 结果

= 赋值 a=3,b=2 a=3,b=2

+= 加等于 a=3,b=3;a+=b; a=5,b=2;

-= 减等于 a=3,b=2,a-=b; a=1,b=2;

= 乘等于 a=3,b=2,a=b; a=6,b=2

/= 除等于 a=3,b=2,a/=b; a=1,b=2;

%= 模等于 a=3,b=2,a%=b; a=1,b=2

a+=b 可以想象成 a=a+b;

变量声明完了之后,可以使用赋值语句(assignment statement)给变量赋一个值,Java中使用等号(=)作为基本的赋值运算符(assignment operator),

格式如下:

variable = expression;

变量 = 表达式;

变量我们已经知道如何声明,表达式具体如何定义?

表达式的定义:

表达式涉及到值(常量),变量和通过运算符计算出的值,以及他们组合在一起计算出的新值。

x =y+1;

例如:

public static void main(String[] args) {

int x = 1; // 声明int变量x, 赋值1给变量x

int y = 0; // 声明int变量y, 赋值0给变量y

double area; // 声明double变量area

double radius = 1.0; // 声明double变量radius,并赋值1.0给变量radius

x = 5 * (3 / 2) + 3 * 2; // 将=右半部分表达式的计算结果赋值给变量x

x = y + 1; // 将变量y和1的求和的值赋值给变量x

area = radius * radius * 3.14159; // 将计算面积的值赋值给变量area

}
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

8.2 比较运算符

如何比较两个值?使用比较运算符 3和5谁大,在java中如何比较?

比较运算符比较的两边操作数,结果都是boolean的,只有true和false两种结果。

运算符 运算 例子 结果

== 相等于 4= =3 false

!= 不等于 4!= 3 true

< 小于 4 < 3 flase

大于 4>3 true

<= 小于等于 4<=3 false

= 大于等于 4>=3 true

Instanceof 检查是否是类的对象 “hello”instanceof String true

注意的细节:

1.使用比较运算符的时候,要求两种数据类型必须一致。

byte、short、char 会自动提升至int。

4.3 逻辑运算符

什么是逻辑运算符?连接比较运算符的符号称之为逻辑运算符。那么为什么要连接比较运算符? 举例:当你去公司应聘,招聘要求,男性(判断为真),并且开发经验1年(判断为假)那么,我们还适合去面试吗,不能,因为只满足了一项,总体是不满足的(总体结果为假)。

逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。我们的比较运算符只能进行一次判断,对于对此判断无能为力,那么逻辑运算符就可以经将较运算符连接起来。

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: