标签:
------iOS培训、Java培训、Android培训, iOS学习型技术博客,期待与您交流------
按位与 &
1101110 101101
0110101 000100
——————— ---------------
0100100 000100
原位和1&,保持不变;和0&,都为0
因此,可以让原来数字的某位与1&,根据结果能确定该位是0还是1,且结果只有0或1
a&1==1 //a为奇数,因为奇数的最后一位是1
a&1==0 //a为偶数,因为偶数的最后一位是0
//输出一个整数的二进制形式
void printBinary(int num){
// 采用右移后,每一位&1取得每一位的值打印
// 定义变量,记录右移的位数
// 右移31后&1位取得第一位值 0或1
// (sizeof(num)<<3)-1==4*8-1==31
for ( int count=(sizeof(num)<<3)-1; count>=0; count--) {
printf("%d",(num>>count)&1); // 任何数&1结果只能为0或者1
if (!(count%4)) {
printf(" ");
if (!(count%8)) {
printf(" ");
}
}
}
printf("\n");
}
按位或 |
010110 101101
011100 000000
——————— ---------------
011110 101101
a|0=a
按位异或 ^
每位相同得0,不同得1。 且可以交换
a^b^c==a^c^b==b^a^c
a^a==0
a^0==a
a^b^a==b
// 利用位异或^运算实现a、b值的互换a^b^a==a^a^b==0^b==b
a=a^b;
b=a^b;
a=a^b;
左移 <<
a<<n==a*2的n次方
但是左移有可能导致正负性改变
右移 >>
a>>n==a/2的n次方
正负性不变
标签:
原文地址:http://www.cnblogs.com/ithmPeak/p/4401397.html