本章是进制转换和位运算,属于重点,且必须必须动手。原码、反码、补码的内容总结必须要背下来,不能只会应用层面的开发,不懂不熟悉底层的原理。不然落下的东西迟早都要补回来了,而且补的很麻烦,不如这次系统全给学完弄懂了。实在搞不懂的建议看一遍原视频
另外进制转换是自己手写的,字有些丑,大家将就着看。所有章节的内容一定一定要动手完成
附原视频链接:【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_bilibili
Java基础-进制及其转换
键盘输入Scanner
学习进制及其转换之前,需要先看下键盘输入的语法
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个扫描器(对象),就是 Scanner
代码示例:
import java.util.Scanner; //需要导入Scanner类
public class input{
public static void main(String[] args){
//创建Scanner对象,new创建一个对象
//myScanner 就是Scanner类的对象
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你的名字:");
//接收用户的输入,给name变量
String name = myScanner.next();
System.out.println("请输入你的年龄:");
int age = myScanner.nextInt(); //查文档可以看到该方法
System.out.println("请输入你的薪水:");
double salary = myScanner.nextDouble();
System.out.println("你的信息如下:");
System.out.println("name:" + name + "age:" + age + "salary:" + salary);
}
}
进制
进制介绍
- 二进制:0,1,满2进1.以0b或0B开头
- 十进制:0-9,满10进1。
- 八进制:0-7,满8进1.以数字0开头表示。
- 十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写。
示例代码
public class BinaryTest{
public static void main(String[] args){
int n1 = 0b1010; //二进制
int n2 = 1010; //十进制
int n3 = 01010; //八进制
int n4 = 0X10101;//十六进制
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.println("n3=" + n3);
System.out.println("n4=" + n4);
}
}
进制转换
二、八、十六进制 转 十进制
十进制转二、八、十六进制
二进制 转 八、十六进制
八、十六进制 转 二进制
原码、反码、补码(重点,背下来)
- 二进制的最高位是符号位:0表示正数,1表示负数(口诀: 0->0 1-> -)
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其它位取反(0->1,1->0)
- 负数的补码 = 它的反码+1,负数的反码 = 负数的补码 - 1
- 0的反码,补码都是0
- java没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果的时候,要看他的原码
位运算
java重有七个位运算(& | ^ ~ >> << >>>)
分别是按位与& 按位或| 按位异或^ 按位取反~
按位与&:两位全为1 结果为1 否则为0
按位或|:两位有一个为1 结果为1 否则为0
按位异或^:两位一个为0,一个为1;结果为1 否则为0
按位取反~: 0->1 1->0
按位与&例子:
public class TernaryOperatorDetail{
public static void main(String[] args){
//1、 2和3进行按位与
//2、 取得2的补码(前面说过计算机运算的时候,都是以补码的方式来运算)
//3、 要知道2的补码,先拿到2的原码=》00000000 00000000 00000000 00000010(正数相同)
//4、 取得3的补码,要知道3的补码,先拿到3的原码
//5、 3的原码=》00000000 00000000 00000000 00000011(正数相同)
//6、 00000000 00000000 00000000 00000010
//7、 00000000 00000000 00000000 00000011
//8、 =00000000 00000000 00000000 00000010(运算后的补码,但结果是原码,为正,相同)
//9、 结果,十进制=2
System.out.println(2&3);
}
}
>2
按位取反~例子:
public class TernaryOperatorDetail{
public static void main(String[] args){
//-2的原码:10000000 00000000 00000000 00000010
//根据规则,补码运算,要先知道反码
//反码:11111111 11111111 11111111 11111101
//补码:11111111 11111111 11111111 11111110
//按位取反:00000000 00000000 00000000 00000001
//结果要看他的原码,就是他本身
//1
System.out.println(~-2);
}
}
>1
位运算符号
- 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移 <<:符号位不变,低位补0
- >>>逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
- 没有<<<符号
位运算可以理解为位移运算
public class hello{
public static void main(String[] args){
int a = 1>>2; //1向右位移2位 00000000 00000000 00000000 00000001 =》00000000 00000000 00000000 00000000 01低位01被顶出去两格
//本质 1/2/2
int b = -1>>2; //-1向右位移2位 负数要在补码状态下运算,结果取原码
int c = 1<<2; //1向左位移2位 00000000 00000000 00000000 00000001 =》 00000000 00000000 00000000 00000100
//本质 1*2*2
int d = -1<<2; //-1向左位移2位
int e = 3>>>2; //算数右移
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println("d=" + d);
System.out.println("e=" + e);
}
}
>a=0
>b=-1
>c=4
>d=-4
>e=0