| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3562 人关注过本帖
标题:关于取反位运算的问题
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:13 
关于取反位运算的问题
程序代码:
int main(void)
{
    unsigned int a = 5;
    printf("%u",~a);
    return 0;
}


这里得到的是:4294967290  而不是期待的 2
搜索更多相关主题的帖子: 取反 位运算 int printf return 
2018-07-31 19:25
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
收藏
得分:20 
无符号数  5 写成二进制(32位机)为:  00000000000000000000000000000101
按位取反写成二进制(32位机)为:      11111111111111111111111111111010
将上述二进制转换成十进制就是:4294967290

126邮箱联系方式:no1xijin@126. com
2018-07-31 19:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 2楼 no1xijin
这个还是懂的,只是想输出2啊

DO IT YOURSELF !
2018-07-31 19:48
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
收藏
得分:0 
  ~a   改成 (~a)&(7u)
7是因为5写成二进制位101,有三位,那么就保留后三位,即111(7);u表示高位置0了

126邮箱联系方式:no1xijin@126. com
2018-07-31 19:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这个7明显有局限性,期待是针对任意数都有效,试了几个0xfffff 都不行

DO IT YOURSELF !
2018-07-31 20:04
流浪猪头
Rank: 2
等 级:论坛游民
帖 子:40
专家分:65
注 册:2018-7-23
收藏
得分:20 
菜鸡路过
2018-07-31 20:11
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
收藏
得分:0 
回复 5楼 wp231957
你的目的是什么,不只转换5一个么?

126邮箱联系方式:no1xijin@126. com
2018-07-31 20:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
5只是一个测试啊,那55呢555呢

DO IT YOURSELF !
2018-07-31 20:18
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
收藏
得分:0 
原理已经告诉你了,要想实现任意的,需要写一些附加代码。

126邮箱联系方式:no1xijin@126. com
2018-07-31 20:34
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:20 
程序代码:
int main(void)
{
    unsigned int a = 5,b=1;
    while(b<a) b*=2;
    printf("%u",(~a)&(b-1));
    return 0;
}

二进制前面0不管,从第一个1开始按位取反,是不是这个意思?

saber,别哭.
2018-07-31 21:15
快速回复:关于取反位运算的问题
数据加载中...
 
   



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

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