1.int类型:32位二进制。
Java使用 补 码 来 表 示 二 进 制 数 ,在补 码 表 示 中 ,最高 位 为 符号 位 ,正数 的 符 号 位 为 0,负数 为 1。
补 码 的 规 定 如 下 :
对 正 数 来 说 ,最高位为 0,其余 各 位 代 表 数 值 本 身 (以二 进制 表 示 ),如 +42的补码 为 00101010。
对 负 数 而 言 ,把该 数 绝 对 值 的 补 码 按 位 取 反 ,然后 对 整 个数 加 1,即得该数的补码

位运算符中 ,除 ~ 以 外 ,其余 均 为 二 元 运 算 符 。 操 作 数 只 能 为 整 型 和字 符 型 数 据 。

位运算符

&:按位与。

规则:只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。

|:按位或。

规则:只有两个操作数对应位同为0时,结果为0,其余全为1.(或者是只要有一个操作数为1,结果就为1)。

~:按位非。

规则:这个很简单只有一个操作数 ,1取反为0,0取反为1 。

^:按位异或。

规则:0异或任何位数,原数不变,1异或任何位数,任何位数取反。
异或运算:相同为0,不同为1。
同或运算:相同为1,不同为0.
无进位相加

<<:左位移运算符。

规则:左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)

>>:右位移运算符。

规则: 有符号右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。 有符号右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。

>>>:无符号右移运算符。

规则:java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|。

排序算法

1.选择排序法

  1. public static void selectSort(int[] arr){
  2. if (arr == null || arr.length < 2) {
  3. return;
  4. }
  5. for (int i = 0; i < arr.length; i++) {
  6. for (int j = i + 1; j < arr.length; j++) {
  7. if (arr[i] > arr[j]) {
  8. swap(arr,i,j);
  9. }
  10. }
  11. }
  12. }

2.冒泡排序法

  1. public static void bubbleSort(int[]arr){
  2. if (arr == null || arr.length < 2) {
  3. return;
  4. }
  5. for (int i = 0; i < arr.length-1; i++) {
  6. for (int j = 0; j < arr.length-1; j++) {
  7. if (arr[j] > arr[j + 1]) {
  8. swap(arr, j, j + 1);
  9. }
  10. }
  11. }
  12. }

3.插入排序法

  1. public static void insertSort(int[]arr){
  2. if (arr == null || arr.length < 2) {
  3. return;
  4. }
  5. for (int i = 1; i < arr.length; i++) {
  6. for (int j = i - 1; j >= 0; j--) {
  7. if (arr[j] > arr[j + 1]) {
  8. swap(arr, j, j + 1);
  9. }
  10. }
  11. }
  12. }

阶乘和

  1. public static long f2(int n){
  2. long ans = 0;
  3. long curr = 1;
  4. for (int i = 1; i <= n; i++) {
  5. curr *= i;
  6. ans += curr;
  7. }
  8. return ans;
  9. }

随机数

1.从1-5随机到1-7随机

  1. //此函数只能用,不能修改
  2. // 等概率返回1~5
  3. public static int f() {
  4. return (int) (Math.random() * 5) + 1;
  5. }
  6. //等概率得到0 和 1
  7. public static int a() {
  8. int ans = 0;
  9. do {
  10. ans = f();
  11. } while (ans == 3);
  12. return ans < 3 ? 0 : 1;
  13. }
  14. //等概率返回0 - 6
  15. public static int b() {
  16. int ans = 0;
  17. do {
  18. ans = (a() << 2) + (a() << 1) + a();
  19. } while (ans == 7);
  20. return ans;
  21. }
  22. //等概率返回 1-7
  23. public static int c(){
  24. return b() + 1;
  25. }

2.从a-b随机到c-d随机

3.01不等概率随机到01等概率随机

  1. // 你只能知道,x会以固定概率返回0和1,但是x的内容,你看不到!
  2. public static int fx(){
  3. return Math.random() < 0.8 ? 0: 1;
  4. }
  5. // 等概率返回0和1
  6. public static int fy() {
  7. int ans = 0;
  8. do {
  9. ans = fx();
  10. } while (ans == fx());
  11. return ans;
  12. }