目录

一、基础知识补充

(1)位运算

(2)二进制的详细操作

二、位运算

(1)按位与(&)

(2)按位或(|)

(3)按位异或(^)

(4)按位左移(<<)

(5)按位右移(>>)

三、位运算例题

题目描述:

题解:

四、共勉


一、基础知识补充

(1)位运算

位运算符要比一般的算术运算符速度要快,而且可以实现一些算术运算不能实现的功能(文章后面会举例子)。如果在完成代码的时候需要做到开发效率高,位运算是必不可少的。位运算用来对二进制位进行操作,包括:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、按位左移(<<)、按位右移(>>) 。

(2)二进制的详细操作

在进行位运算的时候,会用到大量的二进制源码、反码、补码,所以有需要的朋友可以看看我的上一篇文章哦!!!

文章的链接:  http://t.csdn.cn/dasNJ

二、位运算

(1)按位与(&)

1. 应用范围:必须在整数范围内进行

2. 运算方法:将整数从十进制转化为二进制数,上下比较,有零则零 ,两个都是 1 才是 1。

3. 运算编码:补码

    4. 输出方式:整形表达式计算使用在内存中的是补码,打印和看到的都是源码。

举例:将 3 & (-5)

// int 为整型4个字节有32个bit位
int a = 3 ;  // 00000000 00000000 00000000 000000011   正数,源码=反码=补码
int b = -5 ; // 10000000 00000000 00000000 000000101   -5的源码// 11111111 11111111 11111111 111111010   -5的反码// 11111111 11111111 11111111 111111011   -5的补码int c = a & b ;  //按位与:上下比较,有零则零,两个都为 1 才是 1// 00000000 00000000 00000000 00000011   3的补码// 11111111 11111111 11111111 11111011   -5的补码最终结果// 00000000 00000000 00000000 00000011   ----(3)整数,源码=反码=补码

(2)按位或(|)

1. 应用范围:必须在整数范围内进行

2. 运算方法:上下比较有 1 则为 1,两个都是 0 才是 0

3. 运算编码:补码

    4. 输出方式:整形表达式计算使用在内存中的是补码,打印和看到的都是源码。

举例:3 |  (-5)

// int 为整型有4个字节,32个bit位
int a = 3 ;  // 00000000 00000000 00000000 00000011   正数,源码=反码=补码
int b = -5 ; // 10000000 00000000 00000000 00000101   -5的源码// 11111111 11111111 11111111 11111010   -5的反码// 11111111 11111111 11111111 11111011   -5的补码int c = a | b ;    //按位或:上下比较,有 1 则 1,两个都是 0 才是 0// 11111111 11111111 11111111 11111011   -5的补码// 00000000 00000000 00000000 00000011   3的补码最终结果// 11111111 11111111 11111111 11111011  为负数,是补码// 11111111 11111111 11111111 11111010   是反码,补码-1// 10000000 00000000 00000000 00000101   是源码,各个位按位取反-----(-5)

(3)按位异或(^)

1. 应用范围:必须在整数范围内进行

2. 运算方法:上下比较,相同为 0 ,相异为 1 

3. 运算编码:补码

4. 输出方式:整形表达式计算使用在内存中的是补码,打印和看到的都是源码。

举例: 3  ^ (-5)

// int 为整型有4个字节32个bit位
int a = 3 ;  // 00000000 00000000 00000000 00000011  正数,源码=反码=补码
int b = -5 ; // 10000000 00000000 00000000 00000101  负数,(-5)的源码// 11111111 11111111 11111111 11111010  -5的反码// 11111111 11111111 11111111 11111011  -5的补码int c = a ^ b ; //按位异或:上下比较,相同为0,相异为1// 11111111 11111111 11111111 11111011  -5的补码
// 00000000 00000000 00000000 00000011  3的补码//异或 :11111111 11111111 11111111 11111000  负数,补码// 11111111 11111111 11111111 11110111  反码// 10000000 00000000 00000000 00001000  源码-----(-8)

(4)按位左移(<<)

1. 应用范围:必须在整数范围内进行

2. 运算方法:把二进制数向左移动一位,左边溢出的丢弃,右边补零

3. 编码运算:补码

4. 输出方式:整形表达式计算使用在内存中的是补码,打印和看到的都是源码。

举例:将 a = 4 左移一位

// int 为整型,有4个字节,32个bit位
int a = 4 ;       // 00000000 00000000 00000000 00000100,正数,源码=反码=补码
int b = a << 1 ;  // 把a左移一位,左边丢弃,右边补零// 00000000 00000000 00000000 00001000 ----(8)

(5)按位右移(>>)

1. 应用范围:必须在整数范围内进行

2. 运算方法:把二进制数向右移动一位,右边丢弃,左边补原符号位

3. 编码运算:补码

4. 输出方式:整形表达式计算使用在内存中的是补码,打印和看到的都是源码。

int a = -4 ; // 10000000 00000000 00000000 00000100 负数,源码// 11111111 11111111 11111111 11111011  -4的反码// 11111111 11111111 11111111 11111100  -4的补码
int b = >> 1 ; // 把b向右移动一位,右边丢弃,左边补原符号位// 11111111 11111111 11111111 11111110  负数,补码// 11111111 11111111 11111111 11111101  反码// 10000000 00000000 00000000 00000010  源码----(-2)

此时我们可以发现一个整数,左移有乘2的效果,右移有除二的效果。

三、位运算例题

题目描述:

不创建第三变量,进行变量 a , b 的数值交换

题解:

(方法一):简单数位运算,但是不能满足所有需求

#include <stdio.h>
int main()
{int a = 5;int b = 3;a = a + b;b = a - b;a = a - b;printf("a=%d b=%d\n", a, b);return 0;
}

若 a , b 两个数相加的和刚好超过 int 的取值范围,方法一就不可行。

(方法二):位运算,简单,高效

//找规律
//3^3=0
//5^5=0
//3^5^5=3
//3^5^3=5
//3^5=6
// 异或支持交换律#include <stdio.h>
int main()
{int a = 8;int b = 9;int z;z = a ^ b;  //设置密码zb = z ^ b;  //b=a^b^b=aa = z ^ a; //a=a^b^a=bprintf("a=%d b=%d\n", a, b);return 0;
}

四、共勉

这篇文章就是我对位运算的理解,如果大家有什么问题可以在评论区说出来哦,我们共同进步,一起加油!!!

位运算:按位与、按位或、按位异或、按位左移、按位右移相关推荐

  1. 位运算——按位与()、按位或(|)、按位异或(^)

    1.按位与(&) 两个数进行按位与运算时,先将其分别换算成二进制数再进行运算,按位与简单的理解就是同位上的两个数只有同为真时则真,一假则假,1为真,0为假 17将与23进行按位与(&) ...

  2. C语言按位与 按位或 按位异或 按位取反

    与运算:& 两者都为1为1,否则为0 1&1=1,  1&0=0,  0&1=0,  0&0=0 或运算:| 两者都为0为0,否则为1 1|1 = 1,  1| ...

  3. C语言按位与 按位或 按位异或 按位取反(二)

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  4. C语言按位与 按位或 按位异或 按位取反 (一)

    与运算:& 两者都为1为1,否则为0 1&1=1,  1&0=0,  0&1=0,  0&0=0 或运算:| 两者都为0为0,否则为1 1|1 = 1,  1| ...

  5. 位与()、位或(|)、异或(^) 、左移<<、右移>>、原码、反码、补码的简单应用

    一.位与(&).位或(|).异或(^) 1.位与运算(&):两位同时为1,结果才为1,否则为0 参加运算的两个数据,按二进制位进行"&"运算. 运算规则:0 ...

  6. 位操作符:位与、|位或、^异或、~求反、左移位、带符号右移位、无符号右移位...

    . 操作符 名称 实例(例中使用字节) 描述 & 位与 10101110 & 10010010 得到10000010 两个相应位上比特如果都为1,则执行 与 操作会得到1 | 位或 1 ...

  7. 25.位运算(位与)进阶

    题目1:计算一个二进制字符串中1的数量 private int One_Count(int Value){int temp = Value;int count = 0;while (temp > ...

  8. 位运算符:按位与(),按位或(|),按位异或(^),取反(~)左移()和右移()

    数据在内存中是以二进制的形式存放的,计算机存储数据的最小单位是位(bit),一个二进制位可以表示两种状态(0和1),一个字节通常由8位二进制位组成.C语言支持按位运算,按位运算也就是对字节或者字中的实 ...

  9. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.4 位运算构建特定二进制数...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第2章,第2.4节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"异步社区" ...

  10. c语言位运算负数的实例_0基础学习C语言第三章:位运算

    C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移,相当与*2 >> 右移,正数高位补0,负数由计算机决定 循环左移k次 (x< ...

最新文章

  1. bitset HDU6515 Coding Problem
  2. C++关键字积累——持续更新
  3. dwz ajax session超时跳转登录页(struts2自定义拦截器)
  4. mybais传入多个参数的方法
  5. 【重点】Java大厂面试10个知识点汇总
  6. 9个月一迭代,比特大陆量产AI芯片想落地于这三个场景
  7. delphi 快速导出excel
  8. 用iTunes制作苹果手机铃声
  9. 女性贫血的经典食疗方
  10. 微信小程序分析送积分功能如何实现_微信小程序积分商城该怎么进行操作?
  11. 中移物联ML302开发板上手体验
  12. 网页中登陆注册是如何实现的
  13. VC6代码移植VS2008的SDK总结,包括OPENGL和DireX还有Cimage 【总结】
  14. pandas的个人笔记输入
  15. OSI 7层网络模型
  16. smba简单设置共享
  17. 团购的玩法 要粘性也要乐趣
  18. labview编程概述(一)
  19. 图卷积网络(Graph Convolutional Networks, GCN)详细介绍
  20. web页面PC端和移动端的区别有哪些?

热门文章

  1. 大模型时代的科研基础之:Prompt Engineering
  2. minecraft java版多少钱_Java版版本记录
  3. python爬虫系列之初识爬虫
  4. java rgb转yuv_总结各种RGB转YUV的转换公式
  5. 笔记|计算机数据表示实验(HUST)|偶校验编码设计
  6. 朗达.拜恩《力量》经典语录
  7. Android-DialogFragmen踩坑,调用dismiss后回到activity再次出现dialog的问题
  8. idea 2018注册码
  9. 如何进行网站统计分析?分8步走!
  10. PHP: Redis客户端predis/predis