进制介绍
进制: 指进位制,是人们规定的一种进位方式 表示某一位置上的数,运算时逢X进一位。
十进制是逢十进一,二进制就是逢二进一,八进制是逢八进一…
常见进制: 二进制,八进制,十六进制
为什么要学习进制?
原因 : 计算机数据在底层运算的时候,都是以二进制形式 也有数据是以八进制,十进制,或者十六进制进行存储或运算,了解不同的进制,便于我们对数据的运算过程理解的更加深刻。
十进制
二进制
八进制和十六进制
package dome1;
public class test2 {
/*
十进制: java中,数值默认都是10进制,不需要加任何修饰
二进制: 数值前面以0b开头,b大小都可以
八进制: 数值前面以0开头.
十六进制: 数值前面以0x开头,x大小都可以.
注意: 书写的时候,虽然加入了进制的标况,
*/
public static void main(String[] args) {
System.out.println(100);
System.out.println("二进制0b10的十进制表示为:" + 0b10);
System.out.println("八进制010的八进制表示为:" + 010);
System.out.println("十六进制0x10的十六进制表示为:" + 0x10);
}
}
不同进制的书写格式
- 十进制: java中,数值默认都是10进制,不需要加任何修饰
- 二进制: 数值前面以0b开头,b大小写都可以
- 八进制: 数值前面以0开头
- 十六进制: 数值前面以0x开头,x大小都可以
注意: 以上内容是jdk7版本之后才被支持
进制转换
快熟进制转换法
- 8421码
8421码又称BCD码,是BCD代码中最常用的一种
BCD: (Binary-Coded Decimal) 二进制码十进制数
在这种编码方式中,没一位二进制值的1都是代表一个固定数值,把每一位的1代表的十进制数加起来得到的结果就是它代表的十进制
源码反码补码
- 为什么我们要学习原码反码补码
正数的原反补都是相同的
负数的 【反码】,是根据【原码】取反(0变1,1变0)得到的(符号位不变)
负数的 【补码】,是根据【反码】的末尾+1,得到的
位运算
位运算符介绍
- 位运算符指的是二进制位的运算,先将十进制转换成二进制后再进行运算
- 再二进制位运算中,1表示true,0表示false。
package dome1;
public class test3 {
public static void main(String[] args) {
System.out.println(6 & 2);
System.out.println(~6);
}
}
位移运算符
案例: 数据交换
需求:已知两个整数变量 a = 10, b = 20, 使用程序实现这两个变量的数据交换
最终输出a = 20, b = 10;
package dome1;
public class test4 {
/*
需求:已知两个整数变更 a = 10, b = 20 , 使用程序实现这两个变量的数据交换
最终输出 a = 20 , b = 10;
思路:
1.定义一个三方变量temp,将a原本记录的值,交给temp记录(a的值,不会丢了)
2.使用a变量记录b的值,(第一步交换完毕,b的值也丢不下了)
3.使用b变量记录temp的值,也就是a原本的值(交换完毕)
4.输出a和b变量即可
*/
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);
}
}
package dome1;
public class test4 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
案例: 反转
package dome1;
public class test5 {
/*
需求: 已知一个数组 arr = {}; 用程序实现把数组中的元素值交换,
交换后的数组 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, end = arr.length - 1;
// 2.确定交换条件, start < end 允许交换
// 4.每一次交换完成,改变两个指针所指向的索引 start++
//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]);
}
}
}