位运算符讲解

简介: 位运算符讲解


目录

                                               与(&)

                                               或(|)

                                               非(~)

                                               异或(^)

                                               移位运算符

                                               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;
  }

 

                                               或(|)

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

10进制数        15            二进制    00001111

                       14                           00001110

15|14=15(00001111)

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

                                         非(~)

             一个二进制操作数,对应位为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      补码(因为为负数所以加一)  
  }

 

                                                  异或(^)

           同为假,异为真

10进制数        15            二进制    00001111

                       14                           00001110

15^14=1(0000001)

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

 

                        移位运算符

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

 

相关文章
|
7月前
|
C语言
基本的算术运算符
基本的算术运算符
73 1
|
28天前
算术运算符
【11月更文挑战第24天】
22 4
|
7月前
|
C++
C++程序中的算术运算符
C++程序中的算术运算符
78 2
|
5月前
|
存储 算法 安全
day10:算术运算符
【7月更文挑战第10天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
33 3
|
6月前
|
Python
位运算符
【6月更文挑战第28天】位运算符。
37 1
|
6月前
|
存储 编译器 C++
C++中的位运算符
C++中的位运算符
38 0
|
7月前
|
编译器 C++
c++算术运算符
c++算术运算符
39 0
|
7月前
|
存储
位运算符和位操作符
位运算符和位操作符
32 0
C#中算数运算符及逻辑运算
C#中算数运算符及逻辑运算
85 0
深入理解算数运算符
深入理解算数运算符
55 0