打印一个整型的二进制
public class PrintBinary {
public static void main(String[] args) {
int num = 200;
printBrnary(num);
}
public static void printBrnary(int num) {
for (int i = 31; i >= 0; i--) {
int a = (num & 1 << i) == 0 ? 0 : 1;
System.out.print(a);
}
}
}
位移运算符
&:将两个数计算后输出一个数
<<:将一个数经过二进制计算后的到另一个数
一个数取反加一表示这个数的相反数,例如:
+1的二进制为00000000 00000000 00000000 00000001
取反为 111111111 111111111 111111111 11111110
加一为
- 1的二进制为111111111 111111111 111111111 111111111
32位二进制可以表示2^32个数字,但其中一半是负数,一半是0和正数
32位的首位为0的为正数或0,首位为1的为负数
但是-2^32取反加一还是本身
题目一
给定一个参数N,
返回: 1! + 2! + 3! + 4! + … + N! 的结果
public class A {
public static void main(String[] args) {
int n = 4;
long b = a(n);
System.out.println(b);
}
public static long a(int n) {
int add = 0;
int mul = 1;
for (int i = 0; i < n; i++) {
mul *= i + 1;
add += mul;
}
return add;
}
}
题目二
将一个数组按升序生成另一数组
1.选择排序:将0到最后一位遍历,将最小的数放在0位置
将1到最后一位遍历,将最小的数放在1位置
…………………………………………………
…………………………………………………
2.冒泡排序:将0到倒数第一位遍历,将最大的数放在倒数第一位
将0到倒数第二位遍历,将最大的数放在倒数第二位
……………………………………………………………
……………………………………………………………
3.插入排序:将0-1位置变有序,将0-2位置变有序…………
public class Sort {
public static void main(String[] args) {
int wrong = 0;
for (int i = 0; i < 10000; i++) {
int[] arr = randomArr(1, 5, 3);
int[] arr2 = java.util.Arrays.copyOf(arr, arr.length);
insertionSort(arr);
java.util.Arrays.sort(arr2);
if (!java.util.Arrays.equals(arr, arr2)) {
wrong++;
}
}
System.out.println("错了" + wrong + "次");
}
static int[] randomArr(int min, int max, int length) {
int[] arr = new int[length];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (max - min + 1)) + min;
}
return arr;
}
public static void selectionSort(int[] arr) {
//选择排序
for (int i = 0; i < arr.length; i++) {
int minVauleIndex = i;
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[minVauleIndex]) {
minVauleIndex = j;
}
}
swap(arr, i, minVauleIndex);
}
}
static void bubbleSort(int[] arr) {
for (int j = arr.length - 1; j > 0; j--) {
for (int i = 1; i < j; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
static void insertionSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j - 1] > arr[j])
swap(arr, j, j - 1);
else {
break;
}
}
}
}
static void swap(int[] arr, int a, int b) {
//交换一个数组的两个数的位置
int num = arr[a];
arr[a] = arr[b];
arr[b] = num;
}
}