C语言——操作符练习题

1.sizeof

int main()
{
	short s = 0;
	int a = 10;
	printf("%d\n", sizeof(s = a + 5));//关键看s的类型,sizeof后的表达式不会真实运算
	printf("%d\n", s);
	return 0;
}

2.按位异或实现交换两个数

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

3.求一个整数存储在内存中的二进制中1的个数

按位与&:同1为1 其余为0

按位或 |:同0为0 其余为1

按位异或:相同为0 相异为1

int main()
{
	int num = 0;
	scanf("%d", &num);
	int count = 0;
	//不支持负数的版本
	/*while (num)
	{
		if (1 == num % 2)
		{
			count++;
		}
		num = num / 2;
	}*/
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (1==((num >> i)&1))
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}

4.c只要参与表达式运算,就会发生整形提升,表达式+c,会发生提升,所以sizeof(+c)、sizeof(-c)是四个字节,但是sizeof(c)是一个字节。

int main()
{
	char c = 1;
	printf("%u\n", sizeof(c));
	printf("%u\n", sizeof(+c));
	printf("%u\n", sizeof(!c));
	return 0;
}

5.一道360笔试题

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	//i=a++ || ++b || d++;
	printf("a=%d\n b=%d\n c=%d\n d=%d\n", a, b, c, d);
	return 0;
}

逻辑与 前为真才执行后面

逻辑或 前为假才执行后面

a=0时执行结果:1 2 3 4

a=1时执行结果:2 3 3 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值