位运算
打印一个整数型的32位
public void print(int num){
for(int i = 31; i > 0;i--){
System.out.print((num & 1 << i) > 0 ? "1" : "0");
}
}
print(1);
//0000000000000000000000000000001
&:与运算,都为1才为1
|: 或运算,有一个为1,就为1
^: 异或运算,相同为0,不相同为1
~: 取反,1变成0,0变成1
二进制第一位:表示符号位,1 :负号,0:正号
负数为正数的取反+1
例如:1的二进制表示为:0000000000000000000000000000001
-1二进制位为:11111111111111111111111111111110 + 1 = 1000000000000000000000000000001
数组排序:给定数组int[] arr = new int[]{1,4,2,1,7,9,4,3}
冒泡排序算法
(1)每相邻的两个元素进行比较,如当前位的值小于上一位的值则进行赋值交换
(2)故而第一次循环可以找出最大的值并交换至数据末端,设数组长度为n,则第二次循环n-1即可找出第二大的值并交换至数据倒数第二的位置,以此类推历次循环n-2,n-3 .....n-n次。即可完成数组由大到小的排序
插序排序算法
(1)以第一个元素为起始判断,用第二个元素与第一个元素比较大小,如第二个元素小则进行交换;第三个元素与第二个元素再进行比较,如三个元素小则交换,第二个元素再与第一个元素比较如第二个元素小则交换。
(2)故而第一层循环需遍历数组n次,第二层循环需遍历元素下标-1次数同时比较当前元素与上一个元素的大小并做交换。
选择排序算法
(1)默认第一个元素为最小值,遍历数组从第二个元素开始依次与第一个元素比较,如比第一个元素小则交换。
(2)故而第一次遍历数组n次可找到最小的元素并交换至数据首端,第二次遍历数组n-1次可找到第二小的元素并交换到数组第二位,以此类推遍历n-2,n-3...n-n次可完成数组由小到大的排序