今天看《深入理解计算机系统》的看到很相似的符号,特此做了一下总结和区分,以防搞混乱
首先是位运算符号涉及以下几个符号:
1,&(AND)
2.,|(OR)
3。~(NOT)
4,^(异或)//相同为0不同为1
5,》》 《《 左右移动,X>>3,X<<4
这写位运算最好都是展开成二进制来进行操作,这样最明显
然后,和位操作的符号很像的就是逻辑运算了
首先第一个问题是:什么是逻辑运算
A;所谓的逻辑运算之针对命题来,他们是2个完全不一样的东西,功能上来说认为所有非0的参数都表示TRUE,0表示FLASE
其次第二个问题是:他们都有哪些符号?
1,&&(AND)
2,||(OR)
3,!(NOT)
之所以说他们完全不懂请看下面的结果
!0X61 == 0X00
!!0X61 =0X01
他们只有二值表示:0X00 或者0X01
而位运算
0X61&0X03 ==0X01/保持低2位同理类推!!
问题三:>> <<这个两个位移符号补位是怎么样的
0X40<<4,如这个,左移地位都是补充0
而0X40>>4高位到底是补充0还是1?
虽然没有规定是逻辑左移还是算术左移,但是目前几乎都是算术左移
算术左移:高位是1补充1,是0补充0
位的操作还有保持某几位,比如低四位:X&0XF
某几位置一:X|0XF
任何一个数都是自己的补数即X^X=0;
向左是负数,向右是负数
补码的表示几乎都是现在的机器所使用的用法,即最高位是权高位符号位,其权重=-Xw*2^(w-1)
所以有符无符号转换成补码是+权重,而补码转成无符号则是T2U(X)=2^w-X
通常我们写某个字长的最小值是是这样写的TMIN(32)=-2^31-1 而不是写成-2^32
当有符号和无符号数据相比较时,会把有符号数据转化成无符号的数据