C/C++ 位运算

#include<bits/stdc++.h> 
using namespace std;

int main()
	{
		/*
		 按位与运算 & 
		 把某些位变成0 其余位不变
		*/ 
		//把int类型低8位置0,其余不变
		int n = 231;
		n &= 0xffffff00; 
		printf("%d\n",n);
		//short类型的低8位置零
		n &= 0xff00;
		//求int变量第7位是1 or 0
		int a = 127;
		a &= 0x80;//与完判断第8位 是否是 0 (从1开始数) 
		printf("%d",a == 0x80);
		
		/*
			按位或 | 
			把某些位变成1 其余位不变 
		*/ 
		//  低8位变成1 ,高位不变 
		c |= 0xff;  
		
		/*
			按位异或 ^ 
			某些位取反 其他位不变 
		*/ 
		//低8位取反,其他位不变
		
		n ^= 0xff;
		
		/*
			按位非 ~ 
		*/ 
		~n;
		
		/*
			左移 << 右移 >>
			左右移动不改变原变量 
			左移末尾补0
			右移:有符号数,补上原符号位 无符号补 0 
		*/ 
		 
		
		return 0;
	}

	/*
			有两个int 变量 a 和n(0 <= n < 31) 
			写出一个表达式,使该表达式的值和a的第n位相同 
		*/ 
		int res;
		a = 10;
		res = (a >> n) & 1;  //二进制从0位开始计数 
		//或者 
		res = ((1 << n)&a) >> n;//这种 n != 31 因为 此时 最后与的是符号位 再右移会补上符号位可能产生错误 
		 


猜你喜欢

转载自blog.csdn.net/tianweidadada/article/details/80552192