登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

A1Pass的风清月朗居

追随技术的巅峰,突破欲望的枷锁!我,是技术与精神的享乐者!

 
 
 
 
 

日志

 
 

C语言位运算入门  

2008-07-31 16:29:29|  分类: 思绪燃星火——技 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

题记:前几个月我们班班长跟我说她对位运算还是不太明白,叫俺给讲讲,于是有了下文……

【以下为大致意思】

班长:“唉~~这C语言可真难,你说这可怎么办?” <--学呗……

我   :“” <--当时正忙到紧要关头,没回复。

班长:“今天老师讲的位运算不知道你会不?你都没来听课,肯定早就会了……”

我   :“你没听懂?”

班长:“恩!这可怎么办呀,急死了!你能给我讲讲吗……”

我   :“我过会在网上给你传点东西,你看完了就明白了,现在我们宿舍有人睡觉,咱们先别发短信了。”

 

           晚上没事了,一时兴起,全屏个人感觉写出下文,发到博客前我又整理了下格式,希望对刚刚学C的朋友有用……

 

按位与 &

0&0=0  0&1=0  1&0=0  1&1=1

例如:
   00000011
&  00000101
------------
   00000001

解释:“与”即为连带关系,例如某人与某人,某物与某物。

假如我说一句话“小猫与小狗是动物”,这句话是对的。
假如我说一句话“小明与小狗是动物”,这句话就是错的,因为小明是人类。

///////////////////////////////////////////////////////////////

按位或 |

0|0=0  0|1=1  1|0=1  1|1=1

例如:
   00000011
|  00000101
------------
   00000111

解释:“或”即为选择关系。例如向左走或向右走,吃饭或睡觉。

假如我说一句话“小明或小狗是人类”,这句话是对的。
假如我说一句话“小猫或小狗是人类”,这句话就是错的,因为这里根本没有人类。

///////////////////////////////////////////////////////////////

异或 ^

0^0=0  0^1=1  1^0=1  1^1=0

例如:
   00000011
^  00000101
------------
   00000110

解释:“异或”即为有限定的选择关系。例如走路异或是坐车,用钢笔异或是用铅笔。

语境:这个面包谁偷吃了?
假如我的回答为“小明异或是小狗”,这句话是对的。
假如我的回答为“小明异或是小明”,这句话是错的,因为作为“小明”的只有一个对象。

那么怎样的情况下第二句话才正确呢?就是同时有两个叫做“小明”的孩子。

///////////////////////////////////////////////////////////////

取反 ~

~0=1  ~1=0

例如:
   00000011
~
------------
   11111100

解释:“取反”即为取得相反目的的行为。例如将“生”取反即为“死”,这个就不用解释了吧?

///////////////////////////////////////////////////////////////

左移运算符 <<

高位溢出,低位补0

例如:
             <<1      <<2
01000000  10000000  00000000
01111111  11111110  11111100

解释:由于系统底层读取数据是按照由低地址到高地址读取,例如010011的读取顺序为1>1>0>0>1>0,而当将其向左移位后,计算机要新开辟一个BIT的空间将其补够8位,又因为计算机开辟新空间的初始状态下都为0,所以就造成了向左位移时用0补齐的情况。

///////////////////////////////////////////////////////////////

右移运算符 >>

高位不定,低位溢出

例如:
             >>1      >>2
01000000  00100000  00010000
01111111  00111111  00011111

10000111  11000011  11100001
10111000  11011100  11101110

解释:我上面的例子是针对咱们的教科书,实际情况是根据计算机CPU的不同,右移的结果也不尽相同,有的就像上面那样,如果右移前符号位为负数(就是第一位为1),那么为了保证结果的可操纵性,不足的高位仍然用1补齐,这样可保证右移后的数符号不会发生变化。有的则不会那么负责,直接用默认的初始BIT将其补齐,也就是都用0补齐了。

 

  评论这张
 
阅读(1213)| 评论(8)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018