| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2462 人关注过本帖
标题:数一个数用二进制表示有几个1,为什么要定义成 unsigned char x ?? 试了一 ...
取消只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:10 回复次数:8 
数一个数用二进制表示有几个1,为什么要定义成 unsigned char x ?? 试了一下int x 还真不行
把下面代码的x 宣言成 int x 还真得不出結果, 为什么,有哪位可以解释一下么
程序代码:
  int main(void){
        unsigned char x = (unsigned char)-1;
        printf("%d\n",bitcount(x));
        return 0;
    }

    int bitcount(unsigned char x) {  
        int count;
        for (count = 0; x!=0; x>>=1)           /* 比较最低位,用 & 来比较,每结束一个向右移一位 */
             if ( x & 01 )     
                  ++count;
        return count;
    }
搜索更多相关主题的帖子: color 二进制 
2012-01-10 23:56
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
我C ,谢了~~ 
最好仅对无符号数进行移位运算
因为-1 是负数,所以結果由实现定义, 
看君一张图,省我一本书

The quieter you become, the more you can hear
2012-01-11 00:16
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 4楼 TonyDeng
好吧,我同意,不过在我这种练手阶段还是可以通过这些奇怪的程序学到很多东西的

The quieter you become, the more you can hear
2012-01-11 00:29
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 7楼 zaixuexi
嗯,学过海明码,看看维基明天在复习一遍,试试明天晚上能不能把海明码 的代码贴上来哈~~

The quieter you become, the more you can hear
2012-01-11 00:42
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 11楼 beyondyf
厉害,见识了,这个决对快
用3&2 4&3 试了一下,
这也是数bit啊,
谢~~~

The quieter you become, the more you can hear
2012-01-11 22:38
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 13楼 beyondyf
嗯,让我想想,这个~
    5 & 4 == 4
    4 & 3 == 0
    如果是求5 中的1 判断3 次,为2
    如果 a > 0 则c++ 至少为1
    然后 a & a-1 
    然后 a & a-1 
    然后 a & a-1 
    然后 a & a-1 
    然后就不明白为什么了,
    还望beyondyf不令赐教

The quieter you become, the more you can hear
2012-01-11 22:58
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 15楼 beyondyf
原来如此,非常感謝~~

The quieter you become, the more you can hear
2012-01-11 23:19
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 20楼 wfoo
就是左边可能被1填充的意思了吧!非常感谢

The quieter you become, the more you can hear
2012-01-15 01:53
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 18楼 lz1091914999
这应该就是直接查表的方法吧,
把0到255中1的个数记录下来,
每次判断8位
是不是把程序里的4改为sizeof(int)会更好一些?
非常感谢你的代码,又多了一个思路
虽然看不懂cout是什么,估计和printf之类差不多吧

The quieter you become, the more you can hear
2012-01-15 02:11
快速回复:数一个数用二进制表示有几个1,为什么要定义成 unsigned char x ?? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018202 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved