1、进制的介绍与书写格式
win+R 输入calc能打开计算器
public class Demo1 {
/*
十进制:Java中,数值默认都是10进制,不需要加任何修饰。
二进制:数值前面以0b开头,b大小写都可以。
八进制:数值前面以0开头。
十六进制:数值前面以0x开头,x大小写都可以。
注意: 书写的时候, 虽然加入了进制的标识, 但打印在控制台展示的都是十进制数据.
*/
public static void main(String[] args) {
System.out.println(10);
System.out.println("二进制数据0b10的十进制表示为:" + 0b10);//2
System.out.println("八进制数据010的十进制表示为:" + 010);//8
System.out.println("十六进制数据0x10的十进制表示为:" + 0x10);//16
}
2、任意进制到十进制的转换
3、进制转换-十进制到任意进制转换
4、快速进制转换法
5、原码反码补码
6、位运算-基本位运算符
package com.itheima.demo;
public class Demo2 {
/*
位运算:
位运算符指的是二进制位的运算,先将十进制数转成二进制后再进行运算。
在二进制位运算中,1表示true,0表示false。
& 位与 : 遇false则false, 遇0则0
00000000 00000000 00000000 00000110 // 6的二进制
& 00000000 00000000 00000000 00000010 // 2的二进制
-----------------------------------------
00000000 00000000 00000000 00000010 // 结果: 2
| 位或 : 遇true则true, 遇1则1
^ 位异或 : 相同为false, 不同为true
~ 取反 : 全部取反, 0变1, 1变0 (也包括符号位)
00000000 00000000 00000000 00000110 // 6的二进制补码
~ 11111111 11111111 11111111 11111001
- 1 // -1求反码
------------------------------------
11111111 11111111 11111111 11111000 // 反码推原码
10000000 00000000 00000000 00000111 // -7
*/
public static void main(String[] args) {
System.out.println(6 & 2);
System.out.println(~6);
}
}
7、位运算-位移运算符
package com.itheima.demo;
public class Demo3 {
/*
位移运算符:
<< 有符号左移运算,二进制位向左移动, 左边符号位丢弃, 右边补齐0
运算规律: 向左移动几位, 就是乘以2的几次幂
12 << 2
(0)0000000 00000000 00000000 000011000 // 12的二进制
-----------------------------------------------------------------------------
>> 有符号右移运算,二进制位向右移动, 使用符号位进行补位
运算规律: 向右移动几位, 就是除以2的几次幂
000000000 00000000 00000000 0000001(1) // 3的二进制
-----------------------------------------------------------------------------
>>> 无符号右移运算符, 无论符号位是0还是1,都补0
010000000 00000000 00000000 00000110 // -6的二进制
*/
public static void main(String[] args) {
System.out.println(12 << 1); // 24
System.out.println(12 << 2); // 48
}
}
package com.itheima.demo;
public class Demo4 {
/*
^ 运算符的特点
一个数, 被另外一个数, 异或两次, 该数本身不变
*/
public static void main(String[] args) {
System.out.println(10 ^ 5 ^ 10);
}
}
8、数据交换
package com.itheima.test;
public class Test1 {
/*
需求:已知两个整数变量a = 10,b = 20,使用程序实现这两个变量的数据交换
最终输出a = 20,b = 10;
思路:
1. 定义一个三方变量temp,将a原本记录的值,交给temp记录 (a的值,不会丢了)
2. 使用 a 变量记录 b 的值,(第一步交换完毕,b的值也丢不了了)
3. 使用 b 变量记录 temp的值,也就是a原本的值 (交换完毕)
4. 输出 a 和 b 变量即可
*/
/*
动态初始化格式:
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组,可以存放多少个一维数组
n表示每一个一维数组,可以存放多少个元素
*/
public static void main(String[] args) {
int a = 10;
int b = 20;
// 将a原本记录的值,交给temp记录 (a的值,不会丢了)
int temp = a;
// 用 a 变量记录 b 的值,(第一步交换完毕,b的值也丢不了了)
a = b;
// 使用 b 变量记录 temp的值,也就是a原本的值 (交换完毕)
b = temp;
// 输出 a 和 b 变量即可
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
9、数组反转
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
// 交换逻辑代码
int temp = arr[0];
arr[0] = arr[4];
arr[4] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);//50, 28, 37, 46, 19
}
package com.itheima.test;
public class Test2 {
/*
需求:已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值交换,
交换后的数组 arr = {50, 46, 37, 28, 19}; 并在控制台输出交换后的数组元素。
步骤:
1. 定义两个变量, start和end来表示开始和结束的指针.
2. 确定交换条件, start < end 允许交换
3. 循环中编写交换逻辑代码
4. 每一次交换完成, 改变两个指针所指向的索引 start++, end--
5. 循环结束后, 遍历数组并打印, 查看反转后的数组
*/
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
// 1. 定义两个变量, start和end来表示开始和结束的指针.
int start = 0;
int end = arr.length -1;
// 2. 确定交换条件, start < end 允许交换
// 4. 每一次交换完成, 改变两个指针所指向的索引 start++, end--
// for(int start = 0, end = arr.length -1; start < end; start++, end--)
for( ; start < end; start++, end--){
// 3. 循环中编写交换逻辑代码
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}