1.单与(&) 和 双与(&&)区别?
运算结果是一样的,运算过程不一样。
单与:左右两边都要运算;双与:如果左边为false,则右边就不做运算,结果为false(短路)
单或(|) 和 双或(||)区别是一样的 这里就不写了
2.对两个整数变量值进行互换(不需要第三方变量)
使用^ (异或运算)---》缺点阅读性差 面试时常考
int a,b;
a = a^b;
b=a^b;
a=a^b;
右边都是a^b,左边是 a b a
3.冒泡排序法
for(int i = 0 ; i < arr.length-1 ; i++) {
for( int j = 0 ; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
4.给定一个有序数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,那么这个数的存储角标如何获取。
public static int halfSearch_2(int[] arr, int key) {
int max, min , mid;
max = arr.length;
min = 0;
while(min <= max) {
mid = (min+max)>>1;
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid -1;
else
return mid;
}
return min;
}
5.二分查找法
public static int halfSearch_2(int[] arr, int key) {
int max, min , mid;
max = arr.length;
min = 0;
while(min <= max) {
mid = (min+max)>>1;
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid -1;
else
return mid;
}
return ~min;//反码---或者 -1
}
6.进制转换
//进制转换
public static void trans(int num, int base , int offset) {
if(num == 0) {
System.out.println("0");
return;
}
//定义一个对应关系表
char[] chs = {'1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
char[] arr = new char[32];// 二进制是32个比特位
int pos = arr.length;//指针
while(num != 0) {
int temp = num & base;
arr[--pos] = chs[temp];
num = num>>>offset;
}
for(int i = pos ; i < arr.length ; i++) {
System.out.println(arr[i]);
}
}
//十进制 ---》转十六进制
public static void toHex(int num) {
trans(num,15,4);
}
//十进制---》转二进制
public static void toBiany(int num) {
trans(num,1,1);
}
//十进制---》转八进制
public static void toOctal(int num) {
trans(num,7,3);
}