C++ primer 位运算符 一体式笔记

//打印二进制
void printf_bin(int num);

int main() {

	/*****位运算*****/
	//位移运算符
	unsigned char bits = 0233;	//10011011
	bits << 8;	//提升为int,向左移8位 00000000 00000000 10011011 00000000
	bits << 31;	//超出边界丢弃 10000000 00000000 00000000 00000000
	std::cout<<(bits >> 3)<<std::endl;	//向右移3位,超出边界舍去 00000000 0000000 00000000 00010011
	std::cout << typeid(bits >> 3).name()<<std::endl;	//int类型
	//位求反运算符
	printf_bin(~bits);	//11111111 1111111 1111111 01100100
	std::cout << (~bits) << std::endl;	//-156
	//位与&、位或|、位异或^
	printf_bin(bits & ~bits);	//32个0
	printf_bin(bits | ~bits);	//32个1
	printf_bin(bits ^ bits);	//32个0
	printf_bin(bits ^ ~bits);	//32个1

}


//打印二进制
void printf_bin(int num)
{
	int i, j, k;
	unsigned char* p = (unsigned char*)&num + 3;//p先指向num后面第3个字节的地址,即num的最高位字节地址

	for (i = 0; i < 4; i++) //依次处理4个字节(32位)
	{
		j = *(p - i); //取每个字节的首地址,从高位字节到低位字节,即p p-1 p-2 p-3地址处
		for (int k = 7; k >= 0; k--) //处理每个字节的8个位,注意字节内部的二进制数是按照人的习惯存储!
		{
			if (j & (1 << k))//1左移k位,与单前的字节内容j进行或运算,如k=7时,00000000&10000000=0 ->该字节的最高位为0
				printf("1");
			else
				printf("0");
		}
		printf(" ");//每8位加个空格,方便查看
	}
	printf("\r\n");
}

打印数据二进制格式的方法参考自:C语言打印数据的二进制格式-原理解析与编程实现_c语言打印二进制-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值