原码反码补码的简单测试

&按位与

两数的二进制数全为1则为1
#两个相同的数按位与
返回相同的数
int a=6;
printf("%d",a&a);//

|按位或

两数的二进制数存在1则为1
#两个相同的数字按位或

返回相同的数

int main()
{
	int a = 6;
	printf("%d\n", a | a);//6
	return 0;
}

^按位异或

两数的二进制位不同为1相同为0
#两个相同的数字

返回0

int main()
{
	int a = 6;
	printf("%d\n", a ^ a);//0
	return 0;
}

@TOP
全部为原来这个数

int main()
{
	int a = 6;
	printf("%d\n", a & a&a);//6
	printf("%d\n", a | a)|a;//6
	printf("%d\n", a ^ a^a);//6
	return 0;
}

全部对0进行运算


运算一次

int main()
{
	int a = 6;
	printf("%d\n", a & 0);//0
	printf("%d\n", a | 0);//6
	printf("%d\n", a ^ 0);//6
	printf("%d\n", a & 0 & 0);//0
	printf("%d\n", a | 0 | 0);//6
	printf("%d\n", a ^ 0 ^ 0);//6
	return 0;
}

对0x55555555运算_0101 ----0101

int main()
{
	int a = 6;//0x00000006//0110
	int b = 0x55555555;   //0101
	printf("%d\n", a & b);//4           //0100
	printf("%x\n", a | b);//0x55555557	//0111
	printf("%x\n", a ^ b);//0x55555553  //0011
	printf("%d\n", a & b & b);//4
	printf("%x\n", a | b | b);//0x55555557
	printf("%d\n", a ^ b ^ b);//6
	return 0;
}

对0xffffffff运算

int main()
{
	int a = 6;//0x00000006//0110
	int b = 0xffffffff;   //1111
	printf("%d\n", a & b);//6//0110
	printf("%d\n", a | b);//-1//1111
	printf("%d\n", a ^ b);//-7//1001
	printf("%d\n", a & b & b);//6
	printf("%d\n", a | b | b);//-1
	printf("%d\n", a ^ b ^ b);//6 两次相同
	return 0;
}

对1进行位运算

&

int main()
{
	int a = 6;
	int b = 0;
	for (int i = 0; i < 32; i++)
	{
		b = a & (1 << i);// 0 2 4 0 0  0相加等于原数
		printf("%d ", b);
	}
	printf("\n", b);
	for (int i = 0; i < 32; i++)
	{
		b = a & (1 >> i);//1>>i==0
		printf("%d ", b);
	}
	return 0;
}

|

int main()
{
	int a = 6;
	int b = 0;
	for (int i = 0; i < 32; i++)
	{
		b = a | (1 << i);
		printf("%d ", b);//7 6 6 14 22 38 70 134 262 518 1030 2054 4102 8198 16390 32774 65542 131078 262150 524294 1048582 2097158 4194310 8388614 16777222 33554438 67108870 134217734 268435462 536870918 1073741830 -2147483642
	}
	printf("\n", b);
	for (int i = 0; i < 32; i++)
	{
		b = a | (1 >> i);//1>>i==0
		printf("%d ", b);//7 6 6 6 6 6
	}
	return 0;
}

^

int main()
{
	int a = 6;
	int b = 0;
	for (int i = 0; i < 32; i++)
	{
		b = a ^ (1 << i);
		printf("%d ", b);//7 4 2 14 22 38 70 134 262 518 1030 2054 4102 8198 16390 32774 65542 131078 262150 524294 1048582 2097158 4194310 8388614 16777222 33554438 67108870 134217734 268435462 536870918 1073741830 -2147483642
	}
	printf("\n", b);
	for (int i = 0; i < 32; i++)
	{
		b = a ^ (1 >> i);//1>>i==0
		printf("%d ", b);//7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值