当前位置: 首页 > news >正文

今日分享 位运算

位运算直接操作二进制位,是程序员的底层魔法。它不仅效率极高,还能写出优雅巧妙的代码。

 

核心运算与奥义

 

与 ( & ): 全1才1。常用于屏蔽某些位或检查特定位是否为1。

或 ( | ): 有1就1。常用于设置某些位为1。

异或 ( ^ ): 不同为1。可理解为"无进位加法",是交换、加密的神器。

左移 ( << ): 乘以2的幂。右边补0,注意溢出。

右移 ( >> ): 除以2的幂。符号位决定左边补0还是1。

 

常用技巧

 

1. 判断奇偶:  x & 1 ,结果为1则奇数,0则偶数。

2. 交换两数:  a ^= b; b ^= a; a ^= b; ,无需临时变量。

3. 清除最后一个1:  x & (x - 1) ,用于统计二进制中1的个数。

4. 获取最后一个1:  x & -x ,在树状数组等数据结构中很有用。

 

 

 

实战例题:缺失的数字

 

题目: 给定包含  0, 1, 2, ..., n  中  n  个数的序列,找出缺失的那个数。

 

思路: 利用异或的特性: x ^ x = 0  和  x ^ 0 = x 。将数组中所有数与  0  到  n  异或,最终结果就是缺失的数字。

 

C语言实现

 

 

#include <stdio.h>

 

int missingNumber(int* nums, int numsSize) {

    int result = numsSize;

    for (int i = 0; i < numsSize; i++) {

        result ^= i ^ nums[i];

    }

    return result;

}

 

int main() {

    int nums[] = {3, 0, 1};

    printf("Missing number: %d\n", missingNumber(nums, 3)); // 输出 2

    return 0;

}

 

 

C++实现

 

 

#include <iostream>

#include <vector>

 

using namespace std;

 

int missingNumber(vector<int>& nums) {

    int result = nums.size();

    for (int i = 0; i < nums.size(); i++) {

        result ^= i ^ nums[i];

    }

    return result;

}

 

int main() {

    vector<int> nums = {3, 0, 1};

    cout << "Missing number: " << missingNumber(nums) << endl; // 输出 2

    return 0;

}

 

 

Python实现

 

 

def missingNumber(nums):

    result = len(nums)

    for i, num in enumerate(nums):

        result ^= i ^ num

    return result

 

nums = [3, 0, 1]

print("Missing number:", missingNumber(nums)) # 输出 2

 

 

Java实现

 

 

public class MissingNumber {

    public static int missingNumber(int[] nums) {

        int result = nums.length;

        for (int i = 0; i < nums.length; i++) {

            result ^= i ^ nums[i];

        }

        return result;

    }

 

    public static void main(String[] args) {

        int[] nums = {3, 0, 1};

        System.out.println("Missing number: " + missingNumber(nums)); // 输出 2

    }

}

 

 

 

 

http://www.dtcms.com/a/435388.html

相关文章:

  • 【Java EE】MyBatis 全面详解
  • 南宁网站 制作wordpress怎么登陆ftp
  • JSON 与 Form Data 在接口测试中的技术对比与应用指南
  • 网站建设制作微商授权书个人博客网站设计的目的
  • 51c自动驾驶~合集36
  • 天猫魔盒M19技凡科技定制版OS刷机教程
  • 临沧网站建设安徽智能网站建设
  • 【MySQL初阶】05-CRUD-Create
  • 2017 年真题配套词汇单词笔记(考研真相)
  • 网站建设app开发网上装修公司网站策划书
  • 【开题答辩全过程】以 springboot类站酷设计师为例,包含答辩的问题和答案
  • 做网站社区赚钱吗wordpress 收邮件
  • 温州苍南网站建设大型免费网站制作
  • Spring Boot 热部署配置与禁用
  • 专门建立网站的公司吗青岛物流网站建设
  • 网站开发网站设计素材p2p理财网站开发
  • 什么是域名 空间 网站源代码韩国女足出线
  • 给客户做网站建设方案wordpress中文变英文
  • 江西省建设工程造价管理局网站使用wordpress的网站
  • Java Web综合项目实战 - 西蒙购物网
  • Photoshop - Photoshop 更改图像大小
  • 整理k8s中Pod、Deployment和Service的spec配置项--图文篇
  • 网站备案以后怎么做网站建设属于销售费用
  • [QT]常用控件一
  • 探究Function Calling 和 MCP 的奥秘
  • 网站如何做前后端分离网络营销课程学什么
  • 自己手机怎么免费做网站安徽四建东方建设有限公司网站
  • 域名后缀cn做网站家装设计师需要考证吗
  • 广州网站vi设计报价网站建设 图片问题
  • 数据安全能力成熟度模型 (DSMM) 核心要点