C语言位操作是.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言位操作是 一、位的概念 我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255,也11111111.位就是里面的0和1. charc=100; 实际上c应该正好是64H。其中高位在前,低位在后。 第7位第0位 二、位逻辑运算符 符号描述位逻辑与 |位逻辑或 ^位逻辑异或 ~取补 表中除去最后一个运算符是单目运算符,其他都是双目运算符。这些运算符只能用于整型表达式。位逻辑运算符通常用于对整型变量进行位的设置、清零、取反、以及对某些选定的位进行检测。 在程序中一般被程序员用来作为开关标志。较低层次的硬件设备驱动程序,经常需要对输入输出设备进行位操作。 运算的规则是当两个位都为1时,结果为1,否则为0; |运算的规则是当两个位都为0时,结果为0,否则为1; ^运算的规则是当两个位相同时,结果为0,否则为1; ~运算的规则是当为1时结果为0,当为0时,结果为1. 设置位:设置某位为1,而其他位保持不变,可以使用位逻辑或运算。charc; 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的幂次。(即2、4、8等,对应移动的位数就是1、2、3) 举例:输入一个整数,判断这个数中有几个二进制位1?例如输入67,输出结果应该为3.因为67的相应二进制数为0000000001000011(0043H),有3个1出现。 分析:要判断是不是1,只需要判断该位与1与以后是不是1就可以知道。一个整数,判断16次即 main() intnum,k; intcount=0;/*记录1的个数*/scanf(%d,num);for(k=0;k16;k++) printf(%d,count); 这样每次都判断最低位是不是1,判断完以后,让前面的右移一位即可。 对位的操作,一般程序中用的不多,但是在对计算机硬件操作时,肯定会涉及到。例如,我们以后 要讲到的对串口和声卡操作就要用到一些。自总结: 0清零(置0) 1保留原值 |0保留原值 |1置1 这两个操作都有保留原值的功能,这很关键。由此,与|的功效可以用置0和置1来区分 例:a=1010 取第二位: 即其他位置零,第二位保留原值,然后右移一位 高位第四位置0: 第四位置零,其他位保留原值。a0111 3.置第三位为1: 其他位保留原值,第三位置一。a|01004.第三位置1,其他位置0:(a|0100)0100 总结:记住四个字“与零或一”即“0|1”功能对应“置0置1” 所有需求都往这个上转化,先由此确定选用的位操作符,再看其他位是否需要保留,或者进一步选择下一步操作的位操作符。 比如:取某位,相当于其他位置0,所以就要用操作。再比如上方第四个例子。 a=1001 a^1111=0110//相当于取反a^0000=1001//相当于没变化一个抑或的小例子:

文档评论(0)

186****8260 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档