操作符详解

在了解这些操作符之前,我们首先应该了解什么是原码,反码,补码。

1,原码,反码,补码

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

补码:符号位不变,对原码取反。

补码:对补码加一。

注意:对于正整数来说,他的原码,反码,补码都相等。

注意:数据的补码储存于内存之中,并且在运算时运用的也是补码,只有在打印时运用的才是补码

2,移位操作符

1,左移操作符(<<)

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

对于大部分整数来说,左移相当于乘2。

2,右移操作符(>>)

移位规则:1,算术右移:右边抛弃,左边补符号位。(通常使用的算术右移)

                  2,逻辑右移:右边抛弃,左边补0。

对于大部分整数来说,右移相当于除以2。

3,注意

不要移动负数位,这个行为是未定义的。

2,位操作符

1,与操作符&(有0为0,都1为1)

eg:计算二进制中1的个数

int main()
{
	int a = 10;
	int count = 0;
	while (a)
	{
		count++;
		a = a & (a - 1);//每进行一次去掉一个1
	}
	printf("%d", count);
	return 0;
}

2,或操作符|(有1为1,都0为0)

3,异或操作符^(相同为0,相异为1)

eg:在不使用第三个变量的情况下,交换两个数的值。

int main()
{
	int a = 10;
	int b = 20;
	a = a ^ b;
	b = a ^ b;//b=a^b^b==a^0==a
	a = a ^ b;//a=a^b^a==b^0==b
	printf("%d %d", a, b);
	return 0;
}

4,取反操作符~(全部取反)

eg:将13⼆进制序列的第5位修改为1,然后再改回0

int main()
{
	int a = 13;
	//00001101
	//00011101  29
	a = a | (1 << 4);
	//00011101   a
	//00010000  (1<<4)
	//11101111 ~(1<<4)
	a = a & ~(1 << 4);
	printf("%d", a);
	return 0;
}

3,逗号表达式

从左到右依次进行,取最后一个的值为表达式的值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值