Java从入门到放弃02

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)>>参数设为文件名(不含扩展名)>>初始目录设为文件目录>>动作设为捕捉输出>>应用>>确定

猜你喜欢

转载自blog.csdn.net/yinyanyao1747/article/details/88851767