首页 > 试题广场 >

下列 main ()函数执行后的结果是()

[单选题]
下列 main ()函数执行后的结果是()
  • 17
  • 15
  • 16
  • 1
x|(x+1)统计x二进制数中,0的个数
x&(x-1)统计x二进制数中,1的个数
发表于 2017-09-06 10:08:37 回复(7)
//高赞答案说的不完全对
//统计二进制数中“1”的个数,用如下代码
int fun(int value)
{
    int cnt = 0;
    while(value)
    {
        cnt++;
        //消除所有1,变成0
        value = value & (value - 1);
    }
}
//统计二进制数中“0”的个数,用如下代码 
int fun(int value)
{
    int cnt = 0;
    while(!value)
    {
        cnt++;
        //消除所有0,变成1
        value = value | (value + 1);
    }
}

编辑于 2018-08-10 09:27:16 回复(4)
values=65535二进制:    1111 1111 1111 1111‬    
                                                 进行&运算
values-1=65534二进制: 1111 1111 1111 1110‬
                                       
values=values&(values-1) 结果为:1111 1111 1111 1110‬

下次循环:
               
values=65535二进制:    1111 1111 1111 1110   
                                                 进行&运算
values-1=65534二进制: 1111 1111 1111 1100‬
                                       
values=values&(values-1) 结果为:1111 1111 1111 1100‬

以此类推:
                当values=0的时候,二进制为 0
                也就是进行了16次&运算
所以答案为:C

发表于 2019-06-12 17:15:21 回复(0)
就是统计65535的二进制有多少个1,这是一种比较好的解法。
发表于 2017-08-05 20:34:02 回复(0)
#include <iostream>
using namespace std;

//统计二进制数中“1”的个数,用如下代码
int fun1(int value)
{
    int cnt = 0;
    while (value)
    {
        cnt++;
        //消除所有1,变成0
        value = value & (value - 1);
    }
    return cnt;
}
//统计二进制数中“0”的个数,用如下代码
int fun0(int value)
{
    int cnt = 0;
    while (!value)
    {
        cnt++;
        //消除所有0,变成1
        value = value | (value + 1);
    }
    return cnt;
}

int main() {
    cout << fun1(65535) << endl;
    cout << fun0(65535) << endl;
    return 0;
}
最终输出结果:
16
0

发表于 2020-03-06 16:29:15 回复(1)
0XFFFF
发表于 2017-07-16 10:42:46 回复(0)
cccc
发表于 2017-04-18 15:43:19 回复(0)
unsigned short 0-65535
发表于 2023-08-12 09:04:09 回复(0)
Int a = 65535不应该是unsigned int吗
发表于 2019-09-05 07:48:10 回复(1)

我怎么觉得是15呢

发表于 2019-03-09 14:51:35 回复(0)