本篇文章主要参考了以下这篇文章:
http://apps.hi.baidu.com/share/detail/5984673

最近在写程序时,我需要判断一个DWORD 类型变量的某一个二进制位是否为1或0,

我们都很清楚,DWORD类型的变量在内存中占32位,现在要我们判断其中的某一位是0还是1,

该如何是好呢?这时我想到了C语言中的位操作,借助位操作,可以实现我们想要的功能。

关于位操作,我从网上收集整理的资料如下:

一、位的概念

我们知道,在计算机中,一个字节占8位(现在的某些电脑也有占16位的),

     这样表示的数的范围为0-255,也即00000000-11111111。位就是里面的0和1。

二、位逻辑运算符

符号          描述

&            位逻辑与
      |              位逻辑或
      ^             位逻辑异或
      ~             取补(取反)

以上位运算符,除去最后一个运算符是单目运算符,其他都是双目运算符。

  注:单目运算符只需要一个操作数,双目运算符必须要有两个操作数才能进行运算

这些运算符只能用于整型表达式。

位逻辑运算符通常用于对整型变量进行位的设置、清零、取反、以及对某些选定的位进行检测。

在程序中一般被程序员用来作为开关标志。

较低层次的硬件设备驱动程序,经常需要对输入输出设备进行位操作。

三、位运算规则

& 运算的规则是当两个位都为1时,结果为1,否则为0;

| 运算的规则是当两个位都为0时,结果为0,否则为1;

^ 运算的规则是当两个位相同时,结果为0,否则为1;

~ 运算的规则是当为1时结果为0,当为0时,结果为1

 应用举例:

设置位:设置某位为1,而其他位保持不变,可以使用位逻辑或运算。


         char c;
         c=c|0x40;

     这样不论c原先是多少,和01000000或以后,总能使第6位为1,而其他位不变。

清除位设置某位为0,而其他位保持不变。可以使用位逻辑与运算。

     c=c&0xBF;

这样c和10111111与以后,总能使第6位为0,其他位保持不变。

那如果想让某位为1,其他位都为0怎么办呢?

四、位移运算符

符号              描述

<<                 左移
       >>                 右移

位移运算符作用于其左侧的变量,其右侧的表达式的值就是要移动的位数,运算结果就是移动后的数值。

例如:

b=a<<2;  //就是a的值左移两位并赋值为b,注意:a本身的值并没有改变。
     
      向左移位就是在低位插入0,

向右移位就是在高位上插入0。

     右移时可以保持结果的符号位,
      
      也就是右移时,如果最高位为1,是符号位,则补1而不是补0。
      
      程序员常常用右移运算符来实现整数除法运算,
      
      用左移运算符来实现整数乘法运算。其中用来实现乘法和除法的因子必须是2的n幂次。

      
      

转载于:https://www.cnblogs.com/friendan/archive/2012/06/18/2838064.html

学习C语言中的位操作相关推荐

  1. 详解C语言中的位操作运算符可以怎么用?

    目录 前言 位运算符介绍 位运算符的应用 一般案例 特殊用法 前言 最近在工作中碰到C语言中的位操作运算符,然后发现自己对这一块的内容比较模糊,所以打算写一篇博文记录这个知识点,今天是3月份的最后一天 ...

  2. c语言中指针的类型,学习C语言中的指针类型

    摘要:结合我院学生十年来参加全国计算机等级考试(C语言部分)情况,通过分析成绩分布与题型关系,我们发现指针方面的题型失分率最高.在此基础上结合教学实际,本文提出学习指针知识的方法和顺序过程,并将其应用 ...

  3. C语言中的位操作、与、或、非、异或

    位操作运算与逻辑运算操作的区别 按位运算符进行逐位的逻辑运算(如:与或非),输出与输入位数一致: 逻辑运算符进行逻辑运算,不关注输入的某一位而是将输入作为整体进行逻辑操作,输出位数为1或0: 位与 位 ...

  4. C语言中的位操作(8)--根据指定掩码选择两数之一

    unsigned int a; // value to merge in non-masked bits unsigned int b; // value to merge in masked bit ...

  5. C语言中的位操作(4)--判断整数是否为2的幂

    unsigned int v; // 判断v是否为2的幂 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂// 改变表示方法 ...

  6. 【C语言进阶深度学习记录】三十九 C语言中的可变参数(参数可变的函数)

    用过printf()函数的热都知道,printf的参数可以有多个,它是可变的,根据我们输出参数的类型以及个数的不同来确定参数.今天来学习C语言中参数可变的函数是如何实现的. 文章目录 1 可变参数 2 ...

  7. 【C语言进阶深度学习记录】四 C语言中的类型转换

    今天学习C语言中的类型转换,包括隐式类型转换和显示类型转换 文章目录 1 C语言中的数据类型转换 1.1 强制类型转换 1.11 强制类型转换代码分析 1.2 隐式类型转换 1.21 隐式类型转换代码 ...

  8. c语言中按位或赋值给变量,[转载]C语言位运算符在单片机上的应用

    C语言位运算符 学过汇编的朋友都知道汇编对位的处理能力是很强的,但是C语言也能对运算对象进行按位操作,从而使C语言也能具有一定的对 硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不 ...

  9. c语言字符串加减_C语言中指针的介绍

    C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...

最新文章

  1. Vml+Dhtml:制作一个应用渐变颜色效果不错的进度条
  2. AIX HA模拟宕机--维护磁带机
  3. 关于ipconfig中setclassid的初步认识
  4. Go 语言新提案:添加模糊测试支持
  5. centos php 开启socket,CentOS 配置PHP支持socket扩展
  6. LeetCode 第 198 场周赛(434/5778,前7.51%)
  7. python混合asp_asp后段如何调用python
  8. matlab压控振荡器,MATLAB仿真应用_第5章(1)解析.ppt
  9. 洛谷 P3367 ---- 【模板】并查集
  10. hive 导出json格式 文件_Magicodes.IE在.NET Core中通过请求头导出多种格式文件
  11. mediarecorder 录制的文件无法拖动进度条_如何下载网络ts视频文件
  12. 视频压缩工具FFmpeg的使用(中)
  13. 关于伺服驱动控制的课本_三菱伺服驱动器-说明书.pdf
  14. 堆叠柱状图显示具体数据和百分比
  15. SpringBoot集成Swagger文档及自定义访问路径
  16. 【Hive】if函数用法
  17. 计算机24点游戏音调,24点游戏,任意点游戏在线计算器,4个数加减乘除算24点,任意点_三贝计算网_23bei.com...
  18. python三阶魔方_三阶魔方自动求解及动态可视化matlab代码
  19. 二进制计算机在线使用,二进制计算器
  20. C51学习笔记 9.蜂鸣器

热门文章

  1. db link的查看创建与删除
  2. python---之suplot和suplots的区别
  3. WordPress学习笔记(二)插件安装
  4. 2020华为软件精英挑战赛-有向图找环
  5. installshield mysql_installshield安装文件的制作小技巧
  6. docker 厂商 容器_疫情期间,Docker让运维人员雪上加霜
  7. 安卓9去掉搜索栏_android9.0隐藏虚拟按键跟状态栏,除去google搜索栏.
  8. linux命令行学习游戏,如何在Linux命令行中下载GOG游戏
  9. pycharm自定义代码片段
  10. 你真的会php,你真的会PHP吗?