程序员面试宝典第5章:程序设计基本概念(例题5.1)

5.1.1

#include <stdio.h>
int i=1;
void main()
{
    int i=i;
    printf(" ");
}

在这里插入图片描述
注意,main()里面的i的值不是1。

原书给出的解释:

在C++中这样做是完全合法的(但显然不合理)。int
i=i,i变量从声明的那一刻开始就是可见的了,main()里的i不是1,因为它和main()外的i无关,而是一个未定义值。

5.1.2

#include <iostream>
    using namespace std;
    int main()
    {
   
      int x=2,y,z;
      x *=(y=z=5); cout << x << endl;
/*
"="执行顺序是自右向左
z=5;
y=z;//y此时的值为5
x=x*y;//x此时的值为10
*/
      z=3;
     
      x ==(y=z);   cout << x << endl;
/*
y=z;//y的值为3,z的值也为3.
x==3?//只是一个判断语句而已,不会改变x的值。但是x==3整个式子的值为0
*/      
      x =(y==z);   cout << x << endl;
/*
y==z的值为1
x的值为1
*/        
      x =(y&z);    cout << x << endl;
/*
&是按位与
y和z的十进制值为3,二进制值为0011。按位与的结果仍为0011。返回的值是十进制值。
*/            
      x =(y&&z);   cout << x << endl;
/*
&&和||都是逻辑运算符。 &&(逻辑与) 、 ||(逻辑或) 。
作用:进行多项比较并将结果组合为单一的布尔值(注意这里:布尔值bool)。同时&&(逻辑与) 和 ||(逻辑或) 又是短路操作符,即左边的表达式为假时,将不再执行右边的表达式。
y&&z的值为1。我感觉只有y和z同时为0的时候表达式值才为0,但是y和z为非0的时候就都是1。
*/           
      y=4;
      x=(y|z);     cout << x << endl;
/*
|是按位或。y的十进制值为4,二进制值为0100。z的十进制值为3,二进制值为0011。按位或的结果为:
0100
0011
0111=7
*/            
      x=(y||z);    cout << x << endl;
/*
没什么好说的。x的值为1。
*/           
      return 0;
    }

运行结果:
在这里插入图片描述

5.1.3

#include   <iostream>
using   namespace   std;
int func(int x)
{
    int Count = 0;
    while(x)
    {
        Count++;
        x=x&(x-1);
/*
我一开始还以为是8421码。9999=1001 1001 1001 1001。错了。
9999的二进制数是10011100001111
 10011100001111
 10011100001110
=10011100001110=9998

 10011100001110
 10011100001101
=10011100001100=9996

 10011100001100
 10011100001011
=10011100001000=9992

 10011100001000
 10011100000111
=10011100000000=9984

 10011100000000
 10011011111111
=10011100000000=9728
发现规律。这是个找x的二进制值中有多少个1的算法。
*/
    }
    return Count;
}
int main(){
    cout << func(9999) << endl;
    return 0;
}

本题func函数返回值是形参x转化成二进制后包含1的数量。

运行结果:
在这里插入图片描述
有一个小细节是:书本的源代码的计数值是count,我直接复制过来运行的时候发现没有出现运算结果。然后把它改为Count运行后得出正确结果。

count的用法参考:https://blog.csdn.net/qq_36122764/article/details/82429976

count的作用:在序列中统计某个值出现的次数。

algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。

每天进步一点。每天学习一点东西。慢慢积累吧。

猜你喜欢

转载自blog.csdn.net/qq_34941153/article/details/90041645