一、取反  ~

#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. ldap/sldap

    给新建的账户赋权限也是通过修改配置文件/etc/openldap/slapd.conf来实现,具体的增加的内容如下: 如上面示例中就定义了两个用户,一个是只读用户cn=bbs,dc=361way,dc ...

  2. java-类、对象

    1.类和对象: 类是抽象的,通常不能直接使用 对象是具体的,根据类来创建对象. 2.如何定义一个类:成员变量.成员方法 成员变量:直接定义在类中,在方法外面 成员方法:去掉static 关键字,其他和 ...

  3. tcprstat测试服务器请求响应时间

    tcprstat使用,tcprstat必须使用root权限才能使用 tcprstat -p 3306 -t 1 -n 5 -l 192.168.52.250 centos统计分析所有的IP地址

  4. 【托业】【怪兽】TEST01

    101. respectable 值得尊敬的(形容人或事物) respectful 态度恭敬的(形容人) respecting 关于…… respective 各自的 102. hardly 几乎没有 ...

  5. Cross-Origin跨域问题

    为什么会跨域,要先了解浏览器的同源策略SOP(Same Orign Policy)  https://segmentfault.com/a/1190000015597029 同源: 如果两个页面的协议 ...

  6. 小程序报错 TLS 版本必须大于等于 1.2

    https://www.cnblogs.com/phpper/p/6866036.html 服务器是windows 2008 server 环境是IIS7SSL是申请用的阿里免费.微信小程序发现wx. ...

  7. C#基础加强(5)之装箱与拆箱

    定义 装箱:将值类型赋值给 Object 类型变量时,就是装箱操作,即包装为 Object 对象. 因为值类型都是 ValueType 类型,而 ValueType 页继承了 Object(CLR 内 ...

  8. jupyter notebook 动态图显示

    直接在import matplotlib.pyplot as plt 后面加%matplotlib,或者%matplotlib auto就可以通过弹出窗口的形式显示图片

  9. DDD领域驱动

    DDD领域驱动领域驱动模型.模型驱动代码接触到需求第一步就是考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离.DDD让你首先考虑的是业务语言而不 ...

  10. ubuntu 切换到ROOT权限

    1.sudo+命令,输入当前用户密码后以root权限执行命令,有时间限制且仅限当前命令. 2.sudo -i,输入当前用户密码后以root权限登录shell,无时间限制.使用exit或logout退出 ...