原、反、补码以及有关操作符(左移,右移,按位与,按位或,按位异或,按位取反)

目录

一、原、反、补码

二、移位操作符

1.左移操作符

2.右移操作符

三、位操作符

1.“&”按位与

2.“|”按位或

3.“^”按位异或

4.“~”按位取反

四、位操作符的例题

1.交换两个变量(不创建临时变量)

2.统计二进制中1的个数

3.求两个数二进制中不同位的个数


  • 一、原、反、补码

有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位为符号位,后面的都是数值位。

符号位:“0”代表此数为正,“1”代表而此数为负。

原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

补码:反码+1就得到补码。

  • 二、移位操作符

1.左移操作符

移位规则:左边抛弃、右边补0。

2.右移操作符

逻辑右移:左边用0填充,右边丢弃。

算术右移:左边用原该值的符号位填充,右边丢弃。

  • 三、位操作符

1.“&”按位与

“&”按位与就是将两数的二进制位的每一位两两进行与运算,即为两位同为1,则为1,否则为0(同真为真,否则为假),最终算出结果。

2.“|”按位或

“|”按位或就是将两数的二进制位的每一位两两进行或运算,即为两位只要有一位为1,则为1,否则为0(同假则假,否则为真),最终算出结果。

3.“^”按位异或

“^”按位异或就是将两数的二进制位的每一位两两进行异或运算,即为两位相异为1,相同为0,最终算出结果。

4.“~”按位取反

“~”按位取反是单目操作符(与上述操作符不同),就是将一个数的二进制位的每位取反,即为1为0,0为1,最终算出结果。

  • 四、位操作符的例题

1.交换两个变量(不创建临时变量)

int main()
{
	int a = 2, b = 8;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d b=%d", a, b);
	return 0;
}

2.统计二进制中1的个数

int main()
{
	int n = 0,i = 0,count = 0;
	scanf("%d", &n);
	for (i = 0; i < 32; i++)
	{
		if (((n >> i) & 1) == 1)
		{
			count++;
		}
	}
	printf("%d", count);
	return 0;
}

3.求两个数二进制中不同位的个数

int main()
{
	int a = 0, b = 0,i=0,count=0;
	scanf("%d %d", &a, &b);
	int n = a ^ b;
	for (i = 0; i < 32; i++)
	{
		if (((n >> i) & 1) == 1)
		{
			count++;
		}
	}
	printf("%d", count);
	return 0;
}

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值