左移右移位运算_C / C ++中的按位运算符

在C中,以下6个运算符是按位运算符(在位级别工作)

c8600e8ea44489dad80d32506aca2b6d.png
  1. C或C ++中的&(按位与)将两个数字作为操作数,并对两个数字的每一位进行“与”运算。仅当两个位均为1时,AND的结果才为1。
  2. | 在C或C ++中(按位或)将两个数字作为操作数,并对两个数字的每一位进行“或”运算。如果两个位中的任何一位为1,则OR的结果为1。
  3. C或C ++中的^(按位XOR)将两个数字用作操作数,并对两个数字的每一位进行XOR。如果两个位不同,则XOR的结果为1。
  4. 在C或C ++中,<<(左移)采用两个数字,左移第一个操作数的位,第二个操作数确定要移位的位数。
  5. C或C ++中的>>(右移)采用两个数字,右移第一个操作数的位,第二个操作数确定要移位的位数。
  6. C或C ++中的〜(按位非)取一个数字并将其所有位求反

例:

#include <stdio.h> 
int main() 
{ 
    unsigned char a = 5, b = 9; 
    printf("a = %d, b = %dn", a, b); 
    printf("a&b = %dn", a & b); 
    printf("a|b = %dn", a | b); 
    printf("a^b = %dn", a ^ b); 
    printf("~a = %dn", a = ~a);
    printf("b<<1 = %dn", b << 1); 
  
    printf("b>>1 = %dn", b >> 1); 
  
    return 0; 
}
  1. 左移位运算符和右移位运算符不应用于负数。如果任何一个操作数为负数,则会导致未定义的行为。例如,-1 << 1和1 << -1的结果均未定义。另外,如果数字移位的幅度大于整数的大小,则行为是不确定的。例如,如果整数使用32位存储,则1 << 33是未定义的。请参阅此了解更多详情。
  2. 从技术面试的角度来看,按位XOR运算符是最有用的运算符。 它用于许多问题。一个简单的例子就是“给出一组数字,其中所有元素除一个数字外均出现偶数次,找到奇数出现的数字”。只需对所有数字进行异或运算,就可以有效地解决此问题。
#include <stdio.h> 
  
int findOdd(int arr[], int n) 
{ 
    int res = 0, i; 
    for (i = 0; i < n; i++) 
        res ^= arr[i]; 
    return res; 
} 
int main(void) 
{ 
    int arr[] = { 12, 12, 14, 90, 14, 14, 14 }; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    printf("The odd occurring element is %d ", 
           findOdd(arr, n)); 
    return 0; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值