Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

    • 自定义
    • 排序
    • 位运算
      • 二分查找
      • 递归
      • 双指针(逆向,快慢)
      • 滑动窗口
      • 辅助栈
      • 贪心
      • 回溯
      • 动态规划
      • 二叉树
      • DFS
      • 拼接&拆分
    • 从道家哲学看计算机?
    • 后端
    • OJ
    plantre
    2025-06-11
    目录

    位运算

    // 1. 利用或操作 `|` 和空格将英文字符转换为小写
    ('a' | ' ') = 'a'
    ('A' | ' ') = 'a'
    // 2. 利用与操作 `&` 和下划线将英文字符转换为大写
    ('b' & '_') = 'B'
    ('B' & '_') = 'B'
    // 3. 利用异或操作 `^` 和空格进行英文字符大小写互换
    ('d' ^ ' ') = 'D'
    ('D' ^ ' ') = 'd'
    // 4. 不用临时变量交换两个数
    int a = 1, b = 2;
    a ^= b;
    b ^= a;
    a ^= b;
    // 现在 a = 2, b = 1
    
    // 5. 加一
    int n = 1;
    n = -~n;
    // 现在 n = 2
    // 6. 减一
    int n = 2;
    n = ~-n;
    // 现在 n = 1
    // 7. 判断两个数是否异号
    int x = -1, y = 2;
    boolean f = ((x ^ y) < 0); // true
    
    int x = 3, y = 2;
    boolean f = ((x ^ y) < 0); // false
    
    //数组长度是 2 的幂次方的情况,求余数
    index & (arr.length - 1)
    //消除数字 n 的二进制表示中的最后一个 1
    n & (n-1) 
    //一个数和它本身做异或运算结果为 0,一个数和 0 做异或运算的结果为它本身
    //交换律和结合律
    a ^ a = 0
    a ^ 0 = a
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39

    # 191. 位1的个数 - 力扣(LeetCode) (opens new window)

    class Solution {
        public int hammingWeight(int n) {
            int res = 0;
            while (n != 0) {
                n = n & (n - 1);
                res++;
            }
            return res;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 231. 2 的幂 - 力扣(LeetCode) (opens new window)

    一个数如果是 2 的指数,那么它的二进制表示一定只含有一个 1

    class Solution {
        public boolean isPowerOfTwo(int n) {
            if (n <= 0) return false;
            return (n & (n - 1)) == 0;
        }
    }
    
    1
    2
    3
    4
    5
    6

    # 268. 丢失的数字 - 力扣(LeetCode) (opens new window)

    class Solution {
        public int missingNumber(int[] nums) {
            int n = nums.length;
            int res = 0;
            // 先和新补的索引异或一下
            res ^= n;
            // 和其他的元素、索引做异或
            for (int i = 0; i < n; i++)
                res ^= i ^ nums[i];
            return res;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    编辑 (opens new window)
    上次更新: 2025/06/13, 00:51:28
    排序
    二分查找

    ← 排序 二分查找→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式