/**********笔者鲁钝,不善言辞,以下内容均是当初课程笔记整理,相对简陋浅显,适合于新手教程,大牛勿见笑,若能助君一程,在下不胜感激!******/
众所周知我们的位运算符有&(按位与), |(按位或), ^(按位异或), ~(按位取反), >>(右移)和<<(左移)。
我们知道计算机中所有数据都是以二进制的形式储存的,而我们的位运算就是建立在这个的基础上。
下面我将分别介绍这几种位运算,其中重点介绍按位取反这种运算,笔者将根据自己的个人经验并结合实际例子将之阐述解释
1,&运算
&表示和的意思,遵循的是全真即真,有假即假的原则,这与我们离散数学中的合取有异曲同工之妙。
例:
4 & 5 ?
要计算这题首先需要将它们转化为二进制的形式
1) Change them into binary digit
4 & 5 <==> 100 & 101
接下来按位比较
2)Bitwise comprison
1与1&运算仍为1,0与0&运算仍为0,0与1&运算为0,即结果为100
将结果转化为十进制
3)Change them into decimal digit
100的十进制形式为4,即4 & 5 == 4
2,| 运算
3, ^运算
4,移位运算
5,~按位取反运算
此运算是笔者认为最头疼的运算,当时看的时候纠结了很久,查了很多资料最终整理出了自己的一套方法,下面就个人经验进行总结:
/**************************总结****************************/
按位非运算的思想就是找到该数的补码进行十进制运算后取反得到
对正数使用按位非运算:补码+1后符号取反
对负数使用按位非运算:补码符号取反
/***********************注意*****************************/
正数的原码,反码及补码都是相同的
负数进行反码和补码转换时符号位不动
例:
~7
0 0000111 --> 0 0000111 --> 0 0000111 --> 1 0001000 --> -8
~-7
1 0000111 --> 1 1111000 --> 1 1111001 --> 0 0000110 --> 6
本着求真务实的理念,我是十分希望能仔细罗列这部分,但担心想当初的我一样,看了太多脑子越乱,所以我用尽量简洁的语言归纳了这部分,
如果对于想要深入了解计算机或者程序语言的大牛,这些远远不够,笔者建议去找相关专业的书籍。