| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 355 人关注过本帖
标题:位运算符的问题
只看楼主 加入收藏
jijiacheng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-10-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
位运算符的问题
13的二进制形式:1101
~13结果的二进制形式为:0010
~13结果的十进制形式:-14
这是怎么回事?为什么是-14???

搜索更多相关主题的帖子: 十进制 二进制 
2012-10-23 17:31
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 楼主 jijiacheng
  因为 int j=13,转换成二进制为:0000 0000 0000 0000 0000 0000 0000 1101
  取反后为:                    1111 1111 1111 1111 1111 1111 1111 0010  为负数
  将其转换为补码                1000 0000 0000 0000 0000 0000 0000 1110
  然后你通过printf("%d",j) 即为-14
2012-10-23 18:02
jijiacheng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-10-21
收藏
得分:0 
嗯 为什么要取反然后转换为补码 而不是直接取反??
谢谢
2012-10-23 20:05
范护最
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:26
专家分:24
注 册:2012-10-17
收藏
得分:3 
楼上分析正确。

1爱0
2012-10-23 20:36
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:3 
回复 3楼 jijiacheng
    这是因为在计算机里面数值一律用补码来表示(存储)。正数的补码是其本身;负数的补码是对其原码逐位取反(但符号位除外),然后整个数加1。
2012-10-23 21:15
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
收藏
得分:3 
回复 3楼 jijiacheng
你知道他是怎么把1000 0000 0000 0000 0000 0000 0000 1110算成-14的吗(你可以动手演示一下他等于几)

喜欢睡觉 却经常熬夜
2012-10-23 21:46
jijiacheng
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-10-21
收藏
得分:0 
嗯 终于明白了 非常感谢!!!
2012-10-23 22:29
渡江鸟
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2012-6-28
收藏
得分:3 
说真的数据的存储方式真心不懂!
2012-10-23 23:15
快速回复:位运算符的问题
数据加载中...
 
   



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

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