C语言学习笔记_位运算

知识点记录

基本位运算

按位与:全1为1,见0为0;与1相与无变化,与0相与变为0;可用于特定位清零

按位或:见1为1,全0为0;与1相或变为1,与0相或无变化;可用于特定位置1

异或:相同为0,不同为1;与1异或会取反,与0异或无变化;可用于特定位取反

移位运算

无符号数:左移右侧补0,右移左侧补0

有符号数:左移右侧补0,右移左侧补符号位

构造特定二进制数

unsigned int a, b;

a = (0x1<<3);//构造二进制数0000 …… 0000 1000

b = (0x1<<3) | (0x1<<6);//构造二进制数0000 …… 0100 1000

unsigned int c,d;

c = ~(0x1<<3);//构造二进制数1111 …… 1111 0111

d = ~((0x1<<3) | (0x1)<<6);//构造二进制数1111 …… 1011 0111

测试

给定一个整形数a,设置a的bit3~bit7,保持其他位不变。

a |= 0x1F<<3;

给定一个整形数a,清除a的bit15~bit23,保持其他位不变。

a &= ~(0x1FF<<15);

给定一个整形数a,取出a的bit3~bit8。

a = (a>>3) & 0x3F;

给一个寄存器的bit7~bit17中的值加17

unsigned int b;//定义临时变量

b = (a>>7) & 0x7FF;//获取bit7~bit17中的值

b += 17;//对原来的值增加17

a &= ~(0x7FF<<7);//对应位清零

a |= b<<7 ;//对应位赋值

给一个寄存器的bit7-bit17赋值937,同时给bit21-bit25赋值17。

a &= ~((0x7FF<<7) | (0x1F<<21));//对应位清零

a |= (937<<7) | (17<<21);//对应位赋值

用宏定义将32位数x的第n位置位

#define SET_BIT_N(x, n)(x | (1U<

用宏定义将32位数x的第n位清零

#define CLEAR_BIT_N(x, n)(x & ~(1U<

用宏定义将32位数x的第n位到第m位置位

#define GET_ALLONE_BITS(n, m)(~(~(0U)<

#define SET_BIT_N_M(x, n, m)(x | GET_ALLONE_BITS(n, m)<

截取变量x的第n到第m位

#define GET_BIT(x, n, m)(x>>(n-1) & GET_ALLONE_BITS(n , m))

c语言用位运算将一个数清零,C语言学习笔记_位运算相关推荐

  1. C++学习笔记-----用位运算实现加减乘除

    C++学习笔记-----用位运算实现加减乘除 原文:http://blog.csdn.net/sinat_35261315/article/details/72904945 数据在计算机内存中是以二进 ...

  2. 基础才是王道——TCP/IP详解学习笔记 这位仁兄写得太好了

    TCP/IP详解学习笔记 这位仁兄写得太好了 TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.as ...

  3. Apollo学习笔记3-定位模块配置

    Apollo学习笔记3-定位模块配置 环境介绍 导航设备参数配置 导航设备配置 (1)杆臂配置 (2)GNSS 航向配置 (3)导航模式配置 (4) USB 接口输出设置 (5)网口配置 (6) PP ...

  4. Polyworks脚本开发学习笔记(六)-比较运算、数学运算、逻辑运算及流程控制

    Polyworks脚本开发学习笔记(六)-比较运算.数学运算.逻辑运算及流程控制 前言 比较运算.逻辑运算及流程控制是编程的基本语法,Polyworks的语法规则与VB/C#/Python等并没有很大 ...

  5. ZeroMemory memset 等清零的用法(笔记)

    ZeroMemory memset 等清零的用法(笔记) (1)函数的原型和参数的介绍 ZeroMemory函数 void ZeroMemory( PVOID Destination,SIZE_T L ...

  6. 学习笔记_关于switch在whlie中无限循环的解决办法_C语言

    学习笔记_关于switch在whlie中无限循环的解决办法_C语言 今天在做作业的时候突然发现一个问题 #include<stdio.h> int main() {int a;while( ...

  7. 算法学习笔记(5)-------位运算的tips

    为什么80%的码农都做不了架构师?>>>    在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快. 在实际编程中 ...

  8. C语言学习笔记06-占位符格式、C基本类型及逃逸字符一些细节(附介绍BCD码)

    主要整理有关占位符格式与逃逸字符的一些细节 朋友们,看栗子--"BCD解码" (文末附BCD码介绍) 一个BCD数的十六进制是0x12(对应二进制表示:0001 0010),它表达 ...

  9. 异步清零和同步置数/清零的区别

    同步,异步是对于时钟而言的. 同步指的是,状态的变化需要等待时钟有效沿来触发,所有动作同时跟随这个时钟变化,而异步时,状态变化不依赖与时钟. 异步清零说的是,你需要对一个计数器在满足某种条件时想要他归 ...

最新文章

  1. 【Java面试题】docker拉取镜像
  2. STM32 FSMC学习笔记+补充(LCD的FSMC配置)
  3. 使用IsLine FrameWork开发ASP.NET程序之六—使用ExceptionProcessProvider异常处理框架(下)...
  4. java.lang.reflect.Constructor
  5. Android动态改变TextView字体颜色
  6. 全国Python科研应用专题实操培训班
  7. javaweb基础 - Servlet
  8. Unity3d--第三人称摄像机常用控制
  9. 计算机硬件 中级证,计算机硬件组装与教学方法计算机应用中级职称论文
  10. labview的RS232驱动程序
  11. Linux设置终端快捷键
  12. 怎么修改html上的文字大小,网页字体大小怎么改_电脑网页字体怎么调整-win7之家...
  13. Python暴力破解受密码保护的zip/rar文件
  14. 电子信息工程考研方向计算机,电子信息工程考研方向
  15. 4月6日——4月10日课程表
  16. 新的一年:运动强身,读书明智,思考修心
  17. 《基于短时分数阶傅里叶变换的时频分析方法》
  18. Neo4j 4.x 社区版数据导入及Spring-Data-Neo4j 5.x、6.x使用案例
  19. AI元宇宙数字人直播带货软件 全天24小时直播带货系统 含搭建教程
  20. vue2源码解读笔记(一)

热门文章

  1. python读写磁盘扇区数据有什么用_18-55.在Windows中,能够自动修复文件系统错误、扫描并尝试恢复坏扇区的操作是( )_学小易找答案...
  2. 浅谈“全栈工程师需要掌握哪些技能”
  3. 微信小程序如何申请开通流量主
  4. stm32RCT6 使用NTC热敏电阻实现温度报警器
  5. 如何阻止事件冒泡与默认事件?
  6. weblogic10 下载
  7. 关于Java反射获取静态属性值的方式
  8. 开发板ping不通虚拟机
  9. 关于memset(G,0x3f,sizeof(G))的说明
  10. git 码云 简要使用