0
点赞
收藏
分享

微信扫一扫

想挣钱之各大厂经典笔试原题+详细解题过程(1)

月半小夜曲_ 2022-04-07 阅读 23
c#

励志学好计算机的我从今天开始写题解了!!!
这里选取的题目都是各大厂的经典笔试题,我也会尽量多写出几种解题方法,希望帮到大家,也希望有大佬看到的时候不吝赐教!!!😊😊😊

请添加图片描述
好的,废话不多说,我们上题目✨
第一道经典笔试题–数字的二进制规律🔥🔥🔥

一、题目

二、对题目的解析

三、解题方法

一、题目👉

二、对题目的解析👉

二进制:
组成:0 1
规则:逢二进一
表示方式:二进制数1000010可写成(1000010)2或写成1000010B

而我们知道一个整形是四个字节,也就是32个比特位,也就是说一个整形数字由32个0或1组成🙉
下面再来介绍一下原、反、补码:

例如13的二进制原码为0000 0000 0000 0000 0000 0000 0000 1101

则13的反码就应该是0111 1111 1111 1111 1111 1111 1111 0010

则13的补码就应该是0111 1111 1111 1111 1111 1111 1111 0011
而计算机中存储数据时存的就是该数据的补码。
知道了以上内容之后,就可以为大家解释下面的几种方法了:
**方法一、模与除相结合:**point_right:

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = 0;
	while (n)
	{
		if (n % 2 == 1)
			count++;//对1的个数进行计数
		n = n / 2;
	}
	printf("二进制中1的个数=%d\n", count);
	return 0;
}

上述代码中的每一次n%2就相当于消除掉一个n的二进制表示中的1

不过不用担心,还有其他的方法❗️
方法二:按位与和移位操作符结合👉

下面紧接着,我们再来介绍一下按位与操作符的使用👉
按位与操作符由一个和号字符(&)表示,它有两个操作符数。
在这里插入图片描述
简而言之,按位与操作只在两个数值的对应位置都是1时才返回1,任何一位是0,结果都是0。

下面再来介绍左移操作符👉
左移(<<) 运算符把 expression1 的所有位向左移 expression2 指定的位数。
例如:将13左移1,则第一位被去掉,最后一位补位0.
因此,第二种方法可以用以下代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int num = -1;
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++)
	{
		if (num & (1 << i))
			count++;
	}
	printf("二进制中1的个数=%d\n", count);
	return 0;
}

方法三:另一种按位与👉

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int num = -1;
	int i = 0;
	int count = 0;
	while (num)
	{
		count++;
		num = num & (num - 1);
	}
	printf("二进制中1的个数=%d\n", count);
	return 0;
}

好了,以上就是我对这道题的三种解题方法,希望对大家有帮助✊✊✊
因为现在已经熄灯了,不能打扰室友休息,就先到这里吧😇
欢迎大家推荐更多解题方法!!!
请添加图片描述

举报

相关推荐

0 条评论