标签:
参考:http://www.94cto.com/index/Article/content/id/4.html
假设以整数八位bit存储。
1.符号:& | ^ ~ << >>
2. 逻辑规则和算术规则:& | ^ ~都是8位全部变的
注意:位运算适用于整数,整数在内存中以补码形式存储。包括符号位和数值位,符号位0正1负。
3. << >>要考虑到符号位,正数都是一样的(右移左边补0),负数的话,看编译器去,右移时:左边补0补1看编译器,gcc是补1。
---------------------------
例子: 在逻辑学里:0假1真
1. &
二真为真,否则为假
2. |
一真为真,否则为假
3. ^
两个二进制位值相同则为0,否则为1
#include <stdio.h>
main()
{
int a=071;
int b = 052;
printf("%o\n",a^b); //23
}
00111001
^00101010
----------
00010011
4. ~
所有位取反
5. << >>
以右移为例:
正数:左边补0
负数:左边补1
#include <stdio.h>
main()
{
/*
a=-7
y:10000111
f:11111000
b:11111001 //~a:00000110 6
>>1
11111100 //-:1,bu 1; 0:+,bu 0
b:11111100
f:11111011
y:10000100
-4
*/
int a=-7;
printf("%d \n%d\n",~a,a>>1); // 6 -4
}
标签:
原文地址:http://www.cnblogs.com/htmlphp/p/4864331.html