C语言-位操作符
上一篇 /
下一篇 2012-09-24 18:55:49
/ 个人分类:c语言
&按位与
23: 000000000
000000000 000000000 00010111
56: 000000000 000000000
000000000 00111000
---------------------------------------------------------------------------&
000000000 000000000 000000000
00010000 16
用途:
1、经常用来屏蔽某些二进制位(置零)
如: 把 10111101 (
0xBD)第四位置零:
000000000 000000000 000000000 10111101 0xBD
000000000 000000000 000000000 11110111 0xF7
---------------------------------------------------------------------------&
000000000 000000000 000000000 10110101 0xB5
2、想知道某一位是1还是0
如: 想知道10111101第四位是0还是1
000000000 000000000 000000000 10111101
000000000 000000000 000000000 00001000 ---------------------------------------------------------------------------&
1
按位与操作结果的第四位结是1, 被操作数第四位则是1,是0则是0
-18的二进制位:
|按位或
a=-18, b=56, r=a|b
-18的二进制位是:
首先, 负数在计算机是以补码的形式存在的。
如何计算它的补码呢?
1、先计算出18的二进制原码:00000000
00000000 00000000 00010010
2、按位取反,再加一, 结果为:111111111
11111111 11111111 11101110
a|b:
-18:
&按位与
23: 000000000 000000000 000000000 00010111
56: 000000000 000000000 000000000 00111000
---------------------------------------------------------------------------&
000000000 000000000 000000000 00010000 16
用途:
1、经常用来屏蔽某些二进制位(置零)
如: 把 10111101 (0xBD)第四位置零:
000000000 000000000 000000000 10111101 0xBD
000000000 000000000 000000000 11110111 0xF7
---------------------------------------------------------------------------&
000000000 000000000 000000000 10110101 0xB5
2、想知道某一位是1还是0
如: 想知道10111101第四位是0还是1
000000000 000000000 000000000 10111101
000000000 000000000 000000000 00001000 ---------------------------------------------------------------------------&
1
按位与操作结果的第四位结是1, 被操作数第四位则是1,是0则是0
-18的二进制位:
|按位或
a=-18, b=56, r=a|b
-18的二进制位是:
首先, 负数在计算机是以补码的形式存在的。
如何计算它的补码呢?
1、先计算出18的二进制原码:00000000 00000000 00000000 00010010
2、按位取反,再加一, 结果为:111111111 11111111 11111111 11101110
a|b:
-18: 111111111
11111111 11111111 11101110
56: 000000000 000000000 000000000 00111000
---------------------------------------------------------------------------|
000000000 000000000 000000000 11101110
用途: 1、经常用来把某位置1
2、或得指定位是1还是0(让它与全1,只有要判定位是0的二进制数做按位与操作。)
^按位异或
相同为0 , 不同为1.
0^x=x
1^x=~x
~按位取反
相当于,加一,
再符号位反转
-1二进制位是全1
<<左移
在不丢失有效位的情况下,左移n位
, 相当于乘以2的n次方,无论正负数。
>>
在不丢失有效位的情况下,右移n位
, 相当于整除2的n次方,无论正负数。
左移右边空位补0,
右移左边空位补符号位,无符号数补零。
C语言区分的是操作数是有符号数,还是无符号数。
Java 还有<<< 和>>>有符号左移, 有符号右移。
Int x = 0xabcdef;
X&0xFF;
x>>=8&0xFF
x>>=8&0xFF
x>>=8&0xFF
收藏
举报
TAG: