励志学好计算机的我从今天开始写题解了!!!
这里选取的题目都是各大厂的经典笔试题,我也会尽量多写出几种解题方法,希望帮到大家,也希望有大佬看到的时候不吝赐教!!!😊😊😊
好的,废话不多说,我们上题目✨
第一道经典笔试题–数字的二进制规律🔥🔥🔥
一、题目
二、对题目的解析
三、解题方法
一、题目👉
二、对题目的解析👉
二进制:
组成: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;
}
好了,以上就是我对这道题的三种解题方法,希望对大家有帮助✊✊✊
因为现在已经熄灯了,不能打扰室友休息,就先到这里吧😇
欢迎大家推荐更多解题方法!!!