Java入门基础02
进制的转换
任意进制到十进制的转换:位权展开法
十进制到任意进制的转换:除基取余,直到商为0,余数反转
任意进制到任意进制的转换:以十进制作为桥梁
8421码
一个方便2进制到10进制转换的速查表
原码/补码/反码
最高位为符号位,正数最高位为0,负数最高位为1
正数的原码/补码/反码是一样的
负数的反码计算规则:符号位不变,其他位按位取反
负数的补码计算规则:反码加1
注意:计算机的底层运算使用的是补码
常量
在程序运行过程中,值不会改变的量
Java中的常量类型有两种:1.字面值常量 2.自定义常量(面向对象部分讲解)
字面值常量的类型
字符串常量 由双引号括起来的内容 如System.println.out("hello world")
整数常量 所有整数
小数常量 所有小数
字符常量 由单引号括起来的内容 (单引号只能引单个字母/单个数字/单个符号)
布尔常量 true/false
空常量 null
变量
变量:可以在某个范围内发生变化的量(用来不断的存放同一类型的常量,并可以重复使用)
变量的定义方式:数据类型 变量名=赋值;
变量在使用之前必须赋值和定义数据类型(变量的重新赋值会覆盖掉旧值)
如 int b;
b=20;
b=100;
在同一作用域里(一对{}所括起来的范围内)不能同时定义两个同名变量
如 int b=20;
int b=30;
数据类型
数据类型用来声明数据所用空间的大小,给不同的数据类型在内存中分配不同大小的内存空间。
数据类型有四类八种(整数类型默认int,小数类型默认double)
整型 byte 1(8bit) -128---127
short 2(16bit) -2^15---2^15-1
int 4(32bit) -2^31---2^31-1
long 8(64bit) -2^63---2^63-1 赋值后加L 如long a=19999L
浮点型 float 4(32bit) -3.403*10^38---3.403*10^38 赋值后加F 如float b=1.9999F
double 8(64bit) -1.798*10^308---1.798*10^308
字符型 char 2(16bit) 0---2^16-1
(注:Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节,因此Java中的字符可以存储一个中文汉字)
布尔型 boolean 1个字节
(为了解决1.原码不能将减法用加法来计算,2.反码中00000000和10000000存在正负0的问题,计算机的底层运算采用补码,值得注意的是机器码规定-128没有原码和反码,-128的补码为10000000)
自动类型提升
byte short char在参与数学运算时会自动提升为int类型,如果还有long float参与运算,则会相应的提升为double类型。
强制类型转换
定义:强制将一个数据转换成我们想要的数据类型,强制类型转换有可能会带来精度损失。
如int类型强转至byte类型会丢弃掉3个字节
强转类型的定义方式:数据类型 变量名=(强转数据类型)变量值
如:byte a=(byte)10 将int类型的10强转为byte类型10
Java的常量优化机制
多个常量相加时,他会先算出结果,看没有在这个数据类型的范围内,如果在,不报错,如果超出范围,报错
面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
byte b1 = 3;//正确
byte b2 = 4;//正确
byte b3 = b1 + b2; //错误,byte short char类型在进行运算前首先转换为int类型,该行代码中b1和b2在运算时为int类型 而b3为byte类型,因此程序会报错。
byte b4 = 3 + 4;//正确,常量优化机制
字符运算
字符参与运算,对照ASCII码表中字符对应的数值
加号可以做数学运算符,也可以做连接符(当+运算两端只要任意一端是字符/字符串,加号起连接符的作用)
eg.
System.out.println(10+12+"Hello world!"+10+12)
输出结果应为:22Hello world1012
运算符
01 数学运算符
数学运算符有:+ - * / ++ -- %
需要注意的是,在只有自加或自减的运算中:num++与++num的运行结果是一样的,不分先后。而在有自加自减的混合运算中,如果是num++,则应该先进行运算(运算时使用的是num的初始值),再进行num自加1运算给num重新赋值;如果是++num,应先进行num自加1运算给num重新赋值,再进行运算。
eg. class operator01{
public static void main(string[] args){
int num=1;
int rr=3+(num++)-1+(num--)+1+(++num)+2+(++num)+10;
System.out.println(rr);
System.out.println(num);
}
}
程序结果应为:rr=3+(1)-1+(2)+1+(2)+2+(3)+10=23
02 赋值运算符
= += -= *= %=
eg. class operator02{
public static void main(string[] args){
byte num=10;
num+=128;//num+=10与num=num+10不同之处在于前者可以进行强制类型转换
System.out.println(num);
}
}
程序运行结果应为138
03 比较运算符
比较运算符有> >= < <= == != instanceof
比较运算符的运算结果是布尔类型
eg. class operator03{
public static void main(string[] args){
int a=10;
int b=20;
boolean flag=a==b;
System.out.println(flag);
}
}
程序运行结果为 false
04 逻辑运算符
逻辑运算符有:&(与) |(或) !(非) ^(异或) &&(短路与) ||(短路或)
注意&与&&的区别
eg. class operator04{
public static void main(string[] args){
int a=10;
int b=20;
int c=10;
int d=20;
boolean flag1=a<10&&(b++)>10;//&&的两端有任意一端为false,另一端不进行运算。
System.out.println(flag);
System.out.println(b);
boolean flag2=c<10&(d++)>10;
System.out.println(flag2);
System.out.println(d);
}
}
程序运行结果为flag1=false b=20
flag2=false d=21
05 位运算符
位运算符有与(&)、或(|)、异或(^),按位取反(~),<<(左移),>>(右移),>>>(无符号右移)
注:位运算是直接对二进制补码进行运算
eg. class operator05{
public static void main(String[] args) {
/* 3的补码为00000011
4的补码为00000100 */
System.out.println(3&4); // &按位运算,有0则0,补码计算结果应为00000000
System.out.println(3|4); // |按位运算,有1则1,补码计算结果应为00000111
System.out.println(~3); // ~按位取反,补码计算结果应为11111100
System.out.println(3>>2); // 把>>左边的数据除以2的移动次幂(右边数据) 结果应为3/2^2=3/4 int类型只保留整数位0 (将结论记为右除)
System.out.println(3<<2); // 把<<左边的数据乘以2的移动次幂(右边数据) 结果应为3*2^2=12 (将结论记为左乘)
}
}
程序运行结果:0 7 -4 0 12
06 位异或
特征:一个数被另一个数位异或两次,该数不变
eg. class operator06{
publc static void main(string[] args){
System.out.println(3^4^3);
System.out.println(3^4^4);
}
}
程序运行结果为:4 3
07 值交换
值交换:让两个变量的值进行变换
方式1 采用中间变量
eg. class operator07{
publc static void main(string[] args){
int a=10;
int b=20;
int t=a;//把a的值保留给t
a=b;//把b的值赋给a
b=t;//把a的值赋给b
System.out.println("a="+a);
System.out.println("b="+b)
}
}
方式2 a=a^b;b=a^b;a=a^b;
方式3 a=a+b;b=a-b;a=a-b;
方式4 a=(a+b)-(b=a);
08 三位运算符
语法:表达式?结果1:结果2
运算:表达式结果为true返回结果1,否则返回结果2
应用:求两个数的最大值或三个数的最大值
eg. class operator08{
publc static void main(string[] args){
int a=10;
int b=20;
int c=100;
int max=a>b?a:b;
int maxmax=max>c?max:c;
System.out.println("最大值是"+maxmax);
}
}
程序运行结果:最大值是100
09 关于EditPlus的用户工具配置
步骤1:打开EditPlus>>工具>>配置用户工具>>组名>>新的名称(输入名称,如编译运行)>>添加工具>>应用程序>>菜单文字(输入名称,如编译)>>命令(选择jdk1.8.0_152下bin目录中的javac)>>参数设为文件名>>初始目录设为文件目录>>动作选则捕捉输出>>应用>>确定 步骤2:添加工具>>应用程序>>菜单文字(输入名称,如运行)>>命令(选择jdk1.8.0_152下bin目录中的java)>>参数设为文件名(不含扩展名)>>初始目录设为文件目录>>动作设为捕捉输出>>应用>>确定