位运算符的笔记(自用)

位运算符

左移:在内存空间中,高位丢弃,低位补0,在实际的值中相当于乘以2

ex: 
#include<stdio.h>
int main()
{
    int i=5;
    printf("%d",i<<1);
}
    此时输出的结果为10
    对于5的内存:0000 0000 0000 0101-->000 0000 0000 01010 -->0000 0000 0000 1010

右移:内存空间中,低位丢弃,正数的高位补0,负数的高位补1,实际值相当于除以2。但是负数右移动,偶数直接除以2,奇数要先减1再除以2

ex:
#include<stdio.h>
int main()
{
    int i=-7;
    printf("%d",i>>1);
}
    此时输出的结果是-4
对于5的内存:0000 0000 0000 0101-->00000 0000 0000 010 -->0000 0000 0000 0010



异或:相同的数字进行异或,结果为0,任何数字和0异或的结果是其本身。

用法:如输入5个数,其中2个数出现2次,1个数是出现1次,找出出现1次的那个数,例如输入的是8 5 3 5 8,输出的值为3

代码:

#include<stdio.h>
int main()
{
    int arr[5];
    for(int i=0;i<5;i++)
    {
        scanf("%d",&arr[i]);
    }
    int res=0;
    for(int i=0;i<5;i++)
    {
        res^=arr[i];
    }
    printf("%d",res);
    return 0;
}

按位与和或:“&”  “|”    即用两个数的每一位进行与和或

        二进制 5:0000 0000 0000 0101
              7:0000 0000 0000 0111
此时一个一个数位进行比较即可
              
按位取反 “~”  数位上的数字是1变为0,0变为1 

(若有问题,欢迎指正)

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值