一、取反  ~

#include<stdio.h>
#include<stdlib.h> void main(){
unsigned char ch=; //0000 1111 char的单位是字节,1B=8bit,所以是8位
unsigned char fch=~ch; //1111 0000 取反
unsigned char ffch=~fch;//0000 1111 printf("%d,%d,%d\n",ch,fch,ffch);
system("pause");
}

注意:取反运算符不改变操作数的值,赋值运算符才会改变。

二、与运算  &

#include<stdio.h>
#include<stdlib.h> //位与 1,1->1 01,10,00->0
//1&0=0 , 0&0=0 ->清零
//1&1=1 ,0&1=0 ->保留某些位不变 void main0(){
unsigned char ch1=; //0000 0011
unsigned char ch2=; //1111 0000
unsigned char ch3=; //1111 1111 printf("%d\n",ch1&ch2); //0000 0000 0
printf("%d\n",ch1&ch3); //0000 0011 3
printf("%d\n",ch2&ch3); //1111 0000 240
system("pause");
} //位与实现按位清零
void main1(){
unsigned char ch1=; //1111 1111
unsigned char ch2=; //0000 1111
unsigned char ch3=; //1111 0000 printf("%d\n",ch1&ch2); //清零高四位
printf("%d\n",ch1&ch3); //清零低四位
printf("%d\n",ch1&); //全部清零
system("pause");
} //位与实现取出指定位
void main(){
unsigned char ch=; //1010 1001
unsigned char ch1=; //0011 1100
//0010 1000 40 printf("%d\n",ch&ch1); //取出中间四位
system("pause");
}

三、或运算  |

#include<stdio.h>
#include<stdlib.h> //位或运算 1|1=1 1|0=1 0|1=1 0|0=0
void main0(){
unsigned char ch=; //1010 1001
unsigned char ch1=; //1111 0000
//1111 1001 249
printf("%d\n",ch|ch1);
system("pause");
} //位或运算符可以让某些位变成1 1|0 = 1|1 =1
// 0|1=1 0|0=0 与0相或不改变
void main(){
unsigned char ch=; //1010 1001
unsigned char ch1=; //0000 1111
//1010 1111 实现低四位全部变1
printf("%d\n",ch|ch1);
system("pause");
}

四、异或运算 ^(相同为0,相异为1)

不借助中间变量,实现两变量交换值

#include<stdio.h>
#include<stdlib.h> //异或 1^1=0 1^0=1 0^1=1 0^0=0
void main0(){
unsigned char ch1=; //1010 1001
unsigned char ch2=; //0000 1111
//1010 0110 166
printf("%d\n",ch2^ch1);
system("pause");
} //异或可以实现反转
void main1(){
unsigned char ch1=; //1010 1001
unsigned char ch2=; //1111 1111 全部反转
//0101 0110 86
printf("%d\n",ch2^ch1);
system("pause");
}
void main2(){
unsigned char ch1=; //1010 1001
unsigned char ch2=; //0011 1100 指定位反转(中间反转)
//1001 0101 149
printf("%d\n",ch2^ch1);
system("pause");
}

//异或交换两个变量
//不借助中间变量,实现两个变量的交换——>面试和嵌入式开发
//x,y交换值 x=x^y;y=x^y;x=x^y
/*
等同于加减法实现交换值
x=20,y=10;
x=x+y; //x=30,y=10
y=x-y; //x=30,y=20
x=x-y; //x=10,y=20
*/
void main(){
unsigned char ch1=; //0001 0100
unsigned char ch2=; //0000 1010
printf("%d,%d\n",ch1,ch2); ch1=ch1^ch2;
ch2=ch1^ch2;
ch1=ch1^ch2; printf("交换之后%d,%d\n",ch1,ch2);
system("pause");
}

五、位运算总结

#include<stdio.h>
#include<stdlib.h> void main(){
unsigned char ch1=; //1010 1000
unsigned char ch2=; //1000 0101 printf("&与:%d\n",ch1&ch2); //1000 0000 128
printf("|或:%d\n",ch1|ch2); //1010 1101 173
printf("^异或:%d\n",ch1^ch2); //0010 1101 45
unsigned char ch3=~ch1,ch4=~ch2;
printf("~反:%d,%d %d,%d\n",ch3,ch4,~ch1,~ch2);
system("pause");
}

[c/c++] programming之路(30)、位运算(一)的更多相关文章

  1. Mysql 查询—按位运算

    前言:虽说这是件小事儿,但本宝宝思前想后,还是为它留下一笔,嘿嘿.反正写博客不浪费纸和笔!好久没有开启我的逗比模式了,我亲爱的乖徒弟DBA,DBB,DBAA等,好久不见你们,遥祝幸福快乐+DB. 整个 ...

  2. zoj--3870--Team Formation(位运算好题)

    Team Formation Time Limit: 3000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit ...

  3. Java二进制和位运算,这一万字准能喂饱你

    基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...

  4. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  5. SQL Server时间粒度系列----第8节位运算以及设置日历数据表节假日标志详解

    本文目录列表: 1.位运算 2.设置日历数据表节假日标志 3.总结语 4.参考清单列表   位运算   SQL Server支持的按位运算符有三个,分别为:按位与(&).按位或(|).按位异或 ...

  6. JavaScript 位运算总结&拾遗

    最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个 ...

  7. javascript 位运算

    位运算博大精深,本文总结下基本的位运算的概念. 1.整数的二进制码 位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值.ECMAScript中的所有数值都以IEEE-754 64位格式存储 ...

  8. javascript位运算

    javascript作为一门高级语言,他尽量让开发人员减少思考底层的硬件工作原理,而将精力集中在逻辑开发的层面.不过,不论这门语言多么高级,我们必须知道数据依然以bits的形式存储,有时候我们会直接与 ...

  9. 位运算(bit)

    位运算(bit) Time Limit:2000ms   Memory Limit:64MB [题目描述] lyk最近在研究位运算.它发现除了xor,or,and外还有很多运算.它新定义了一种运算符“ ...

随机推荐

  1. ide phpStorm 配置PHP路径并本地执行PHP脚本

    1.打开设置(File - Settings) 2. 3. 4.到需要执行脚本的文件处,右击 - Run 5.如果本地还未安装PHP,可以下载Xampp,并将PHP目录新增至系统环境变量Path处,重 ...

  2. Spring中加载xml配置文件的常用的几种方式

    https://blog.csdn.net/qq877507054/article/details/62432062

  3. iostat查看io情况

      查看TPS和吞吐量信息[root@controller ~]#iostat -d -k 1 10Device:         tps    kB_read/s    kB_wrtn/s    k ...

  4. linux echo 命令 打印字符串

    打印字符串 [root@MongoDB ~]# echo "heloworld" heloworld

  5. ADB——应用交互

    使用ADB与手机应用交互 应用交互的操作包括:启动应用 / 调起Activity.调起Services.停止Service.发送广播.强行停止应用 基本命令 am <command> 常用 ...

  6. 【VIM】-NO.140.VIM.1 -【VIM】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  7. ThinkPHP安全规范指引

    流年 发布于 ThinkPHP官方博客: https://blog.thinkphp.cn/789333 本文主要和大家探讨一下ThinkPHP的安全注意事项,可以作为ThinkPHP建议的安全规范实 ...

  8. 安卓系统广播暴露设备信息-Android System Broadcasts Expose Device Information

    Android device details are being exposed to running applications via Wi-Fi broadcasts in the mobile ...

  9. python数组相关知识

    1.np中的reshape函数,可以把矩阵重新划分成m行n列. arange(n)可以把 [0,n-1]装入数组中,一定要注意的是img.reshape()并不会改变原来的数组,所以需要另外新建一个数 ...

  10. C#设计模式(13)——代理模式(Proxy Pattern)(转)

    一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...