开发者社区> (小唐同学)> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

位运算符讲解

简介: 位运算符讲解
+关注继续查看


目录

                                                与(&)

                                                或(|)

                                                非(~)

                                                异或(^)

                                                移位运算符

                                                1.>> 右移 

                                                 2.<<左移


 

最近接触了位运算符,我认为位运算符在一些题中的使用是很巧妙得,而且它也是算是一个入门算法。

位运算符有,与,或,非,异或,移位运算符

位运算符实际是采取二进制进行运算,

                                                与(&)

             两个二进制操作数对应位同为1 结果位 才为1,其余情况为0;

   10进制数        15            二进制    00001111

                          14                          00001110

15&14=  14(00001110)

 # include <stdio.h>
 int main()
 {
    printf("%d",14&15);
    return 0;
  }

image

 

                                                或(|)

                  两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0

 10进制数        15            二进制    00001111

                        14                           00001110

15|14=15(00001111)

 # include <stdio.h>
 int main()
 {
    printf("%d",14|15);
    return 0;
  }

image

                                          非(~)

              一个二进制操作数,对应位为0,结果位为1;对应位为1,结果位为0;

取反后得到的是原码   而进行存储时是存储的补码,得到补码的过程要先得到反码

 10进制数       8           二进制    0000 1000

      (~8)=-9(1000 1001)

   取反后原码:1111 0111

   取反后反码:1000 1000(除了符号位 其余位都进行取反操作)

   取反后补码:1000 1001  补码(因为为负数所以加一) 如果为正数不需要进行加一 

             

 # include <stdio.h>
 int main()
 {
    printf("%d",~15);
    return 0;
    //00001000
    //11110111      取反原码
    //10001000      取反反码
    //10001001      补码(因为为负数所以加一)  
 
  }

image

 

                                                   异或(^)

            同为假,异为真

10进制数        15            二进制    00001111

                        14                           00001110

15^14=1(0000001)

 # include <stdio.h>
 int main()
 {
    printf("%d",14^15);
    return 0;
 
  }

image

 

                         移位运算符

1.>> 右移 

 按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。(高位用符号位补充-------正数右移还是正数    负数右移还是负数)

语法:需要移位的数字number >> 移位的次数

13>>2=3

13的二进制位(1101)向右移动两位变成3(11)

性质(在整数下):右移相当于用该数除以2的移位次数再向下取整

13/(2^2)向下取整为3

2.<<左移

将一个数的二进制同时往左移位,低位用0补充

5<<1=10

5(101)向右移动1位 (1010)=10、

性质同上右移

是5*2^1=10

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
位运算
复习acwing算法基础课的内容,本篇为讲解基础算法:位运算,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上,本博客所有习题和模板来自:ACWing算法基础课
12 0
位运算符总结
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/55273954 ...
569 0
位运算
  程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。
776 0
位运算
位运算 我们先来看看位运算操作符:& (按位与)、| (按位或)、^ (按位异或)、~ (按位取反)、>> (按位右移)、<< (按位左移)。  位运算符优先级比+低,注意加小括号!   1、&(按位与) 从概念上来讲,就是将参与运算的两个分量对应的每一位来做逻辑与运算,若两者都为真(等于1),则结果才为真(等于1)。否则都为假(等于0)。
969 0
位运算
1,数值在计算机中的表示 位[bit],位:是指二进制中的位,是计算机能处理的最小单元. 字节[byte],字节:计算机处理的基本单位,计算机的内存是按字节分配存储空间的,一个字节由8位二进制数组成,C中数据类型都是以字节为基本单元.
752 0
位运算
以后慢慢启用个人博客:http://www.yuanrengu.com 位运算   位运算是把数字用二进制表示之后,对每一位上0或者1的运算。   理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。
615 0
+关注
(小唐同学)
保持学习,持续前进
55
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载