zoukankan      html  css  js  c++  java
  • 2.1 二进制数中1的数目

    代码:

    #include <iostream>
    
    using namespace std;
    
    void main()
    {
    	int a = 12;
    	int num = 0;
    	while(1)
    	{
    		if(a!=0)
    		{
    			num++;
    			a = a & (a-1);
    		}
    		else
    			
    			break;
    	}
    	cout<<num<<endl;
    		
    		
    }
    

     给定另一个正整数A、B。问你把A变为B需要改变多少为?

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    void main()
    {
    	int a = 15;
    	int b = 100;
    	int num = 0;
    	int c = 1;
    	while(c)
    	{
    		if( (a%2) != (b%2) )
    		{
    			num++;
    		}
    		a = a/2;
    		b = b/2;
    	    c = a>b?a:b;
    	}
    	cout<<num<<endl;
    }
    

     在做上一道题目时,我犯了一个错误,但是编译确实正确的,代码如下:

    void main()
    {
    	int a = 15;
    	int b = 100;
    	int num = 0;
    	int c = 1;
    	while(c)
    	{
    		if( (a%2) != (b%2) )
    		{
    			num++;
    		}
    		a = a/2;
    		b = b/2;
    	    int c = a>b?a:b;
    	}
    	cout<<num<<endl;
    }
    

     结果却是死循环。

    原因是局部变量全局变量的结果。while(c)中的C是全局变量1,一旦进入while循环,就会被局部变量覆盖,因此变为了一个死循环。

  • 相关阅读:
    一般处理程序页ashx 序列化 Json数组
    SQL server 分页
    MySQL 分页
    获取网站的BaseURL
    java学习书籍推荐
    查询并关闭指定端口进程
    ettercap使用
    MS10-046漏洞利用
    MS12-020漏洞利用
    入侵安卓手机
  • 原文地址:https://www.cnblogs.com/CBDoctor/p/2616702.html
Copyright © 2011-2022 走看看