Summer 20

1.

int main()
{
	char str[] = { 'g', 'o', 'o', 'd' };
	char str1[8] = { 'g', 'o', 'o', 'd', '!' };
	char str2[8] = "good!";
	//char *str3 = "good!";
	printf("%d\n", sizeof(str));//4
	printf("%s\n", str);
	printf("%d\n", sizeof(str1));//8
	printf("%d\n", sizeof(str2));//8
	system("pause");
	return 0;
}

2.如下程序输出结果是 8

int fun(int x)
{
	int count = 0;
	while (x)
	{
		count++;

		x = x & ( x - 1);
	}
	return count;
}

int main()
{
	printf("%d\n", fun(2019));//8
	//2019转化为二进制为  0111 1110 0011‬   有8个0
	system("pause");
	return 0;
}

思路: 将x转化为2进制,看含有的1的个数。
注: 每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。

x = x&(x-1)就是将x最右边的二进制位1变为0。x为2019时二进制为1的位有8个,所以结果为8.

利用x&(x-1)表达式,还可以用来判断一个数(x)是否是2的n次方。如果一个数是2的n次方,那么这个数用二进制表示时其最高位为1,其余位全部为0。

3.如下程序的  输出结果是 4

int func(int a)
{
	int b = 0;
	static int c = 3;
	a = c++, b++;
	return (a);
}

int main()
{
	int a = 2, i, k;
	for (i = 0; i < 2; i++)
	{
		k = func(a++);
	}
	printf("%d\n", k);//4
	system("pause");
	return 0;
}

4.如下程序输出结果是 24

int main()
{
	int s = 0, n;
	for (n = 0; n < 4; n++)
	{
		switch (n)
		{
		default:s += 4;
		case 1:s += 1;
		case 2:s += 2;
		case 3:s += 3;
		}
	}
	printf("%d\n", s);//24
	system("pause");
	return 0;
}

n=0时,程序运行default 语句,因为没有break.  所以接着运行case1,case2,case3语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值