Debug:
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
进制介绍
进制:指进位制,是人们规定的一种进为方式,表示某一位置上的数,运算时逢x进一位。
十进制是逢十进一,二进制就是逢二进一。
Java中:数值默认就是10进制不需要加任何修饰
二进制:数值前面以0b开头,b不分大小写。
八进制:数值前面以0开头。
十六进制:数值前面以0x开头,x不分大小写。
注意:书写的时候,虽然加入了进制的标识,但打印在控制台展示的都是十进制数据。
进制转换
二进制到十进制的转换
公式:系数*技术的权次幂相加。
系数:每一位上的数。
基数:几进制,就是几。
权:从数值的右侧,以0开始,逐个加1增加。
任意进制到十进制
公式:系数*基数的权次幂相加。
十进制到任意进制
公式:除基取余。
使用源数据,不断的除于基数(几进制,基数就是几)得到余数,知道商为0,再将余数倒着拼起来即可。
原码反码补码
介绍:计算机中的数据,都是以二进制补码的形式在计算,而补码是通过原码和反码推算出来的。
原码:可以直观的看出数据大小(看数据)
反码:原码转补码的一个中间形式(转数据)
补码:数据以该状态进行运算(运算数据)
正数的原码反码补码是相同的
负数的反码,是根据原码取反(0变1,1变0)得到的(符号位不变)
负数的补码,是根据反码的末尾+1,得到的
位运算符
符号 | 计算方式 |
& | 遇到0则0,两边同时为1,结果才是1. |
| | 遇到1则1,两边同时为0,结果才是0. |
^ | 相同为false,不同为true |
~ | 取反,二进制位全部取反,0变1,1变0,包括符号位 |
<< | 有符号左移运算,根据符号位,右边补0 |
>> | 有符号右移运算符,根据符号位,补齐左边 |
>>> | 无符号右移,无论符号位是0还是1,都补0 |
1:是true
0:是false
案例:数据交换
需求:已知两个整数变量a = 10,b = 20,使用程序使两个变量数据交换最终输出
a = 20,b = 10;
不使用中间变量
public static void mian(String[] args){
int a = 10;
int b = 20;
a = a ^ b; //a = a ^ b
b = a ^ b; //b = a ^ b ^ b
a = a ^ b; //a = a ^ b ^ a
System.out.println(a);
System.out.println(b);
}
A变量异或两次相同的变量B,这个变量等于A变量本身。
二维数组
二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器。
二维数组的定义
格式1:数据类型[][] 变量名;
格式2:数据类型 变量名[][];
格式3:数据类型[] 变量名[];
二维数组的动态初始化
格式:数据类型[][] 变量名 = new 数据类型 [m] [n];
m:表示这个二维数组,可以存放多少个一维数组。
n:表示每一个一维数组,可以存放多少个原素。
数组初始化的时候 new 之后会在栈内存中开出来一个空间存放数组的
这个栈内存中的地址给到前面的变量名。
[[I@10f87f48
@:分隔符,10f87f48:十六进制内存地址,I:数组中存储的数据类型
[[:几个中括号就代表的是及伪数组。
注意:二维数组存储一维数组的时候,存储的是一维数组的内存地址。
二维数组静态初始化
格式:数据类型 [][] 变量名 = new 数据类型[][] {{元素1,元素2,···},{元素2,元素2···}···};
,{元素简化格式:数据类型[][] 变量名 = {{元素1,元素2,···},{元素1,元素2···}···};
二维数组的遍历
int [][] arr = {{11,22,33},{44,55,66}};
fro(int i = 1,i<arr.length;i++){
fro(int j = 1;j<arr[i];j++){
System.out.println(arr[i][j]);
}
}
通过两个for循环遍历二维数组