有关于位运算

本文介绍了位运算的基本概念,包括与、或、异或、取反、左移和右移等操作,并通过实例展示了如何使用位运算解决整数转换问题。同时,强调了在使用位运算时需要注意的符号位和溢出问题,以及其适用的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于卷了一天的KMP算法,并没有什么收获,所以发点别的东西

位运算

一. 什么是位运算

位运算是计算机中一种对二进制位进行操作的技术。在计算机中,数据存储和处理的最基本单位是比特(bit),而位运算就是对这些比特进行操作的一组运算。位运算常用于提高程序执行效率、节省存储空间以及处理某些特定的问题。

在C语言中,位运算常常用于进行底层的位操作,这些操作可以用于优化代码、节省内存、实现特定算法等。

  1. 位运算的基本操作

位运算包括一些基本的操作,主要有以下几种:

  • 与运算(&):对应位都为1时,结果为1,否则为0。
  • 或运算(|):对应位只要有一个为1时,结果为1。
  • 异或运算(^):对应位相同时结果为0,不同时结果为1。
  • 取反运算(~):对应位取反,0变为1,1变为0。
  • 左移运算(<<):将二进制数向左移动指定位数,相当于乘以2的指定次方。
  • 右移运算(>>):将二进制数向右移动指定位数,相当于除以2的指定次方。

    2.位运算运用的具体案例(力扣.面试题 05.06. 整数转换)

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例1:

 输入:A = 29 (或者0b11101), B = 15(或者0b01111)
 输出:2

示例2:

 输入:A = 1,B = 2
 输出:2

思路:也就是通过异或运算(^) 找到两对应位是否相同.再统计'1'共有多少即可     注意要用unsigned 来处理符号("+ -")    负数按补码形式参加按位或运算。

​
int convertInteger(int A, int B){
    unsigned int n = A ^ B;
    int count = 0;
    while(n){
        if((n & 1) != 0){
            count++;  
        }
        n >>= 1;//右移动一位
    }

    return count;
}

​

3.位运算的注意事项

在使用位运算时,需要注意一些细节:

  • 符号位: 在进行位运算时,对于有符号整数,要注意符号位的影响,可能导致意外的结果。

  • 溢出: 左移运算可能导致溢出,因此在使用时要确保不会超出数据类型的范围。

  • 适用范围: 位运算通常用于处理底层的数据表示和操作,不是所有问题都适合使用位运算。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值