• 求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 }
  • 相关阅读:
    C# 高级编程语言
    unity ForceMode
    UnityError 切换场景灯光变黑问题解决
    Unity Time.timeScale
    Unity 打开网页 Application.OpenURL(字符串);
    Unity www动态加载网上图片
    Unity GameObject.Find 和 transform.Find
    Unity UGUI按钮添加点击事件
    事务
    git和redis
  • 原文地址:https://www.cnblogs.com/longf0720/p/6545887.html
Copyright © 2020-2023  润新知