C语言里位运算就是对一个比特(Bit)进行操作,比特(Bit)是计算机的一个电子元件,只有通电和断电两种状态(这也是为什么计算机会采用二进制进行运算,1代表通电,0代表不通电),8个比特构成一个字节(Byte),它是最小的可操作单位.

CoderDoctorLee

1.按位与运算 (&) :

一个比特位只有0和1两个取值,只有运算符号&左右两边都为1时结果才为1,否则为0。例如1 & 1为1,0 & 0为0,1 & 0为0。数值在内存中以二进制的形式存在。9 & 5可写算式如下:                00001001(9的二进制) & 00000101 (5的二进制) = 00000001 (1的二进制) 所以 9 & 5 = 1。严格来说,数值在内存中以补码形式存在,整数的补码与它的二进制形式相同,负数则不一样。按位与运算符&会对参与运算的两个数的所有二进制位进行&运算。按位与运算通常用来对某些位清0或保留某些位。比如想把一个数字a的高16位清零,保留低16位,可以进行a & 65535运算(65535占用四个字节 二进制表示为00000000000000001111111111111111)。

代码举例:unsigned int a = 9;//二进制:00001001

unsigned int b = 5;//二进制:00000101

unsigned int c = 0XDE09A32B;//十进制:3725173547

unsigned int d = 0X0000FFFF;//十进制:65535

printf("a=%u, b=%u, a&b=%u\n", a, b, a & b);

printf("c=%u, d=%u, c&d(%%d)=%u, c&d(%%X)=%X\n", c, d, c & d, c & d);结果如下:

a = 9, b = 5, a & b = 1

c = 3725173547, d = 65535, c & d(%d) = 41771, c & d(%X) = A32B

2.按位或运算 (|):

参与或运算|的两个二进制位有一个为1时,结果就为1,两个都为0时结果才为0。例如1|1为1,0|0为0,1|0为1。9|5可写算式如下:00001001 (9的二进制)    |    00000101(5的二进制)      = 00001101 (13的二进制)所以9|5=13。按位或运算可以用来将某些二进制位置为1,而保留某些位。

代码举例:unsigned int a = 9;//二进制:00001001

unsigned int b = 5;//二进制:00000101

unsigned int c = 0XDE09A32B;//十进制:3725173547

unsigned int d = 0X0000FFFF;//十进制:65535

printf("a=%u, b=%u, a|b=%u\n", a, b, a | b);

printf("c=%u, d=%u, c|d(%%d)=%u, c|d(%%X)=%X\n", c, d, c | d, c | d);结果如下:

a=9, b=5, a|b=13

c=3725173547, d=65535, c|d(%d)=3725197311, c|d(%X)=DE09FFFF

3.按位异或运算 (^):

按位异或运算参与异或运算^的两个二进制位不同时,结果为1,相同时结果为0。也就是说,0^1为1,0^0为0,1^1为0。9^5可写成算式如下: 00001001 (9的二进制)  ^ 00000101    (5的二进制)  =  00001100 (12的二进制),所以9 ^ 5 = 12。按位异或运算可以用来反转某些二进制位。

代码举例:unsigned int a = 9;//二进制:00001001

unsigned int b = 5;//二进制:00000101

unsigned int c = 0XDE09A32B;//十进制:3725173547

unsigned int d = 0X0000FFFF;//十进制:65535

printf("a=%u, b=%u, a^b=%u\n", a, b, a ^ b);

printf("c=%u, d=%u, c^d(%%d)=%u, c^d(%%X)=%X\n", c, d, c^d, c^d);结果如下:

a=9, b=5, a^b=12

c=3725173547, d=65535, c^d(%d)=3725155540, c^d(%X)=DE095CD4

4.取反运算 (~) :

取反运算取反运算符~为单目运算符,右结合性,作用是对参与运算的数的各二进位按位取反。例如 ~1为0,~0为1。~9的运算为:~0000000000001001 = 1111111111110110所以~9=65526。

5.左移运算 (<

左移运算左移运算符<

6.右移运算 (>>):

右移运算右移运算符>>用来把操作数的各二进位全部右移若干位,低位丢弃,高位补0(或1)。例如:a=9;a>>3;表示把a的各二进位向右移动3位。a=00001001(9的二进制),右移3位后为00000001(十进制1)。

补充:

需要注意的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译器的规定。

代码举例:unsigned int c = 0X00FFFF00;//十进制: 3725173547

unsigned int d = 0XFFFF0000;//十进制: 65535

printf("c=%X, d=%X, c^d(%%X)=%X, c|d(%%X)=%X, c>>4=%X, c<<8=%X\n", c, d, c^d, c|d, c>>4, c<<8);结果如下:

c=FFFF00, d=FFFF0000, c^d(%X)=FF00FF00, c|d(%X)=FFFFFF00, c>>4=FFFF0, c<<8=FFFF0000

c语言 字节某位取反 amp;=,C语言位运算相关推荐

  1. 谭浩强c语言不讲位运算呢,谭浩强c语言教程_第十二章-位运算谭浩强c语言教程_第十二章-位运算.doc...

    12位运算1 12.1位运算符C语言提供了六种位运算符:1 12.1.1按位与运算1 12.1.2按位或运算2 12.1.3按位异或运算2 12.1.4求反运算3 12.1.5左移运算3 12.1.6 ...

  2. c语言字节变量怎样定义,C语言之定义变量_wx5c99a1487a5ff的博客的技术博客_51CTO博客...

    基本格式数据类型,标识符 如:int num1,num2,......如需定义多个类型不同的变量,需分别定义标识符定义规则 标识符只能有数字,字母,下划线组成 标识符不能是C语言中定义的关键字,如in ...

  3. c语言 字节 半字 字,PLC的位,半字节,字节,字介绍

    PLC采用五种数据类型来形成不同的指示.下面是数据类型的解释. 打开今日头条,查看更多精彩图片 位,半字节,字节,字与双字之间的关系如下 二进制,八进制,十进制,BCD,十六进制 DVP-PLC内部依 ...

  4. c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客...

    相信知道除法的作用的人都知道除法怎么来计算吧,不过计算机计算除法的方法可能优点浪费资源了以下是使用位计算转换除法的过程,相信知道游戏编程的朋友对这个应该不陌生吧 原理:假如要实现A/B,B如果是2的整 ...

  5. c语言原码 补码 反码,C语言 原码--反码--补码

    //原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...

  6. C语言每日一练 —— 第20天:位运算

    文章目录 一.前言 二.再谈二进制 1.二进制数值表示 2.二进制加法 3.二进制减法 三.位运算简介 1.位与的定义 2.位与运算符的简单应用 1)奇偶性判定 2)取末五位 3)消除末尾五位 4)2 ...

  7. 4月从零学习C语言(第27天)——位运算

    4月从零学习C语言(第27天)--位运算符 位运算 我们知道计算机程序中的所有数在计算机内存中都是以二进制的形式来储存的.而直接对整数在内存中的二进制位进行操作的运算就是位运算.在C语言中也给我们提供 ...

  8. C语言及程序设计进阶例程-32 位运算及其应用

    贺老师教学链接 C语言及程序设计进阶 本课讲解 位运算 #include <stdio.h> int main() {unsigned short int n = 3;int i;for( ...

  9. 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)

    本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...

最新文章

  1. 数据结构(python语言)目录链接
  2. 五天学习MySQL 数据库教程(一)1.2SQL介绍
  3. 扩展 KMP(模板) 洛谷P5410
  4. mulitpartfile怎么接收不到值_手机有时接收不到微信消息通知,怎么办?超全解决方案...
  5. mysql中limit关键字_【JAVA】关于mysql的limit关键字使用。
  6. iphone储存空间系统怎么清理_iPhone 储存空间里的“系统”项占用过多怎么办?...
  7. 助力泵嗡嗡响解决方法_突破不可能,3D打印革命性的制造高效高扭矩的径向活塞泵...
  8. 魅族内斗;中兴危机;阿里百度要回 A 股 | CSDN极客头条
  9. Kubernetes 小白学习笔记(21)--kubernetes的运维-管理Lable
  10. Creator3D:炫动球球(音乐游戏)实现分享
  11. 做中学之五笔输入法实践教程
  12. python的str是什么意思?
  13. 小米(MUUI)备份文件使用MT管理器打开
  14. PCAP学习笔记二:pcap4j源码笔记
  15. 微信小程序 图片上传与内容安全审核
  16. Jenkins拉取代码返回错误码128
  17. 设置金蝶kis记账王会计科目的教程
  18. Parameter index out of range (1 > number of parameters, which is 0)
  19. 找不到或无法加载主类com.kuang.springcloud.DeptProvider_8002
  20. 罗辑思维时间的朋友2021跨年演讲:长大以后

热门文章

  1. matlab simulink 除法,第03讲 MATLAB-simulink的数值运算.ppt
  2. Arcmap加载在线地图的方法总结
  3. INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)的解决
  4. 用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别
  5. 50多个开源PDF阅读编辑工具汇总
  6. 分励线圈 失压线圈 区别_什么是线圈啸叫,我可以在PC上摆脱它吗?
  7. JavaWeb项目打包成桌面程序,内嵌浏览器、tomcat、jre、mysql,实现一键安装
  8. 【Flutter 学习笔记八】 Flutter plugin not installed; this adds Flutter specific...
  9. CUDA编程(一) —— 相关概念基础知识
  10. ABB AC500 PLC 与西门子 S7-300 CPU DP 通讯