zoukankan      html  css  js  c++  java
  • 求int型正整数在内存中存储时1的个数

    题目描述:

    输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

    输入描述:

     输入一个整数(int类型)

    输出描述:

     这个数转换成2进制后,输出1的个数

    输入例子:
    5
    输出例子:
    2

    方法一:

    计算机保存数据就是2进制的,如char a = 97;那么在计算机里面的信息就是01100001,用2进制打印就是01100001,用10进制打印就是97,因此只存在显示方式的不同。
    c语言中对位操作有几种方式,&与操作,|或操作,^异或操作,~反操作,<<左移位操作,>>右移位操作。
    如果想取a的第i位是多少,表达式(a & (1 << i))为0表示第i位为0,非0表示第i位为1。

     1 #include <iostream>
     2 using namespace std;
     3 #define LEN 32
     4 
     5 int main(){
     6     int i;
     7     cin>>i;
     8     int counter = 0;
     9     int len = LEN;
    10     while(len--){
    11         if(i&(1<<len))
    12             counter++;
    13     }
    14     cout<<counter<<endl;
    15     
    16     return 0;
    17 }

    方法二:

    数字在内存中 ,被转化为二进制。

    例如7表示为0111

    n&(n-1) 即(0111)&(0110)== 0110 就是 n去除了最后一个1 ;

    几个1 就可以在几次内 去除几个1;

     
     1 #include<iostream>
     2 using namespace std;
     3  int main(){ 
     4    int n;    
     5     cin>>n;
     6     int counter=0;
     7     while(n){
     8         n=n&(n-1);
     9         counter++;
    10     }
    11     cout<<counter<<endl;
    12     return 0;
    13 }

    方法三:

    利用bitset
    bitset stores bits (elements with only two possible values: 0 or 1, true or false, ...).
     1 #include <iostream>
     2 #include <bitset>
     3 
     4 using namespace std;
     5 
     6 int main(){
     7     int i; 
     8     cin>>i;
     9     bitset<32> bt(i);
    10     cout<<bt.count()<<endl;
    11 }
  • 相关阅读:
    一个小时学会Git
    Git介绍,安装,Git+Git flow使用
    深度操作系统
    邮件模板定义
    每个程序员都应该知道的一些访问时延值
    C 盘的不速之客
    v14.0AspNetMicrosoft.Web.AspNet.Props 找不到
    WebAPI 2参数绑定方法
    VisualStudio 2015 开启IIS Express可以调试X64项目
    解决WINDOWS防火墙开启后Ping不通
  • 原文地址:https://www.cnblogs.com/longf0720/p/6545887.html
Copyright © 2011-2022 走看看