位运算: 与”&、“非”~、“或||”、“异或”^ ;原码 反码 补码的相互转化

来源:互联网 发布:阿里云os电视工程模式 编辑:程序博客网 时间:2024/05/18 13:25
位运算符主要针对二进制,它包括了:“与”&、“非”~、“或||”、“异或”^。

网大家介绍的都是些皮毛,有的还是错误的。今天就详细介绍一下。


一、要想了解按位运算首先要了解二进制。二进制的基本知识就不说了。说一下计算机二进制的存储。
计算机中,我们常说原码、反码、补码。
1、对于正数来说    原码=反码=补码    三个码都是相等的。
5的 原码:101,反码:101,补码:101。5要存放在计算机的内存里其实存放的是补码,即101。严格的说这么说是错误的,因为5是有类型的比如 5有可能是int、long 、sort。知道这些还不够,操作系统、程序编译器 都有16位32位64位的问题。不过现在的电脑基本上都是32位或64位,int行基本都是32位。如果5是int行在32或64位的电脑上存放:0000 0000 0000 0000 0000 0000 0000 0101(补码)。
5 原码:0000 0000 0000 0000 0000 0000 0000 0101 ,5 反码:0000 0000 0000 0000 0000 0000 0000 0101。
2、对于负数    三个码不一定相等。
第一位为符号位   1负数  , 0正数。
 -5  原码:  1000 0000 0000 0000 0000 0000 0000 0101
 由原码得反码:    符号位不变,其余位取反,0变1、1变0。
 -5 反码: 1111 1111 1111 1111 1111 1111 1111 1010
由反码得补码:在反码上加1。

 -5 补码:   1111 1111 1111 1111 1111 1111 1111 1011


二、位运算。


计算机中的运算都是拿补码进行运算的。(切记)


1.与运算符
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。

“a”的值是129,转换成补码就是10000001,而“b”的值是128,转换成补码就是10000000。 a&b=10000000(补码)=128。

 提示:如果运算的中可能会出现负数一定要把位数写成32位 ,这里就偷懒了。


2.或运算符
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。
a 的值是-5,转换成补码就是 1111 1111 1111 1111 1111 1111 1111 1011 ,而b 的值是128,转换成补码就是 0000 0000 0000 0000 0000 0000 1000 0000,a|b=1111 1111 1111 1111 1111 1111 1111 1011(补码)=1111 1111 1111 1111 1111 1111 1111 1010(反码)=1000 0000 0000 0000 0000 0000 0000 0101(原码)=-5

3.非运算符
非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。


a 的值是-5,转换成补码就是 1111 1111 1111 1111 1111 1111 1111 1011 
~a=0000 0000 0000 0000 0000 0000 0000 0100(补码 且 正数)=4


b 的值是 5,转换成补码就是:0000 0000 0000 0000 0000 0000 0000 0101
~b=1111 1111 1111 1111 1111 1111 1111 1010(补码)= 1111 1111 1111 1111 1111 1111 1111 1001(反码)=1000 0000 0000 0000 0000 0000 0000 0110(原码)=-6


4.异或运算符
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。

分析上面的程序段:a 的值是15,转换成补码为1111,而b 的值是2,转换成补码为0010,根据异或的运算规律,可以得出其结果为1101 即13。



阅读全文
0 0