(二十一)位操作.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(二十一)位操作

主题:(二十一) 位操作 爱在远方 lingxiaofz@sohu 发留言 发邮件 [修改] [删除] 在第一节概述里就说了,C语言是一种中级语言,能对计算机硬件直接操作,这就涉及到位的概念。 一、位的概念 我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255,也11111111。位就是里面的0和1。 char c=100; 实际上c应该正好是64H。其中高位在前,低位在后。 | | 第7位 第0位 二、位逻辑运算符 符号 描述 位逻辑与 | 位逻辑或 ^ 位逻辑异或 ~ 取补 表中除去最后一个运算符是单目运算符,其他都是双目运算符。这些运算符只能用于整型表达式。位逻辑运算符通常用于对整型变量进行位的设置、清零、取反、以及对某些选定的位进行检测。在程序中一般被程序员用来作为开关标志。较低层次的硬件设备驱动程序,经常需要对输入输出设备进行位操作。 运算的规则是当两个位都为1时,结果为1,否则为0; | 运算的规则是当两个位都为0时,结果为0,否则为1; ^ 运算的规则是当两个位相同时,结果为0,否则为1; ~ 运算的规则是当为1时结果为0,当为0时,结果为1。 设置位:设置某位为1,而其他位保持不变,可以使用位逻辑或运算。 char c; c=c|0x40; 这样不论c原先是多少,以后,总能使第6位为1,而其他位不变。 清除位:设置某位为0,而其他位保持不变。可以使用位逻辑与运算。 c=c0xBF; 这样c以后,总能使第6位为0,其他位保持不变。 那如果想让某位为1,其他位都为0怎么办呢? 三、位移运算符 符号 描述 左移 右移 位移运算符作用于其左侧的变量,其右侧的表达式的值就是移动的位数,运算结果就是移动后的变量结果。 b=a2; 就是a的值左移两位并赋值为b。a本身的值并没有改变。 向左移位就是在低位沙锅补0,向右移位就是在高位上补0。右移时可以保持结果的符号位,也就是右移时,如果最高位为1,是符号位,则补1而不是补0。 程序员常常对右移运算符来实现整数除法运算,对左移运算符来实现整数乘法运算。其中用来实现乘法和除法的因子必须是2的幂次。 举例:输入一个整数,判断这个数中有几个二进制位1?例如输入67,输出结果应该为3。因为67的相应二进制数01000011(0043H),有3个1出现。 分析:要判断是不是1,只需要判断该位与1与以后是不是1就可以知道。一个整数,判断16次即可。 main() { int num,k; int count=0; /* 记录1的个数 */ scanf(%d,num); for(k=0;k16;k++) { if(num1==1) count++; /* 判断最低位是不是1 */ num=1; /* num右移1位 */ } printf(%d\n,count); } 这样每次都判断最低位是不是1,判断完以后,让前面的右移一位即可。 对位的操作,一般程序中用的不多,但是在对计算机硬件操作时,肯定会涉及到。例如,我们以后要讲到的对串口和声卡操作就要用到一些。

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档