位运算的小问题

jxliang 2005-04-02 10:04:31
#include <iostream>
using namespace std;

void main()
{
int x = 1, y = -1;
cout<<(~x | x)<<endl;
}

输出结果:-1
为什么不是输出15呢,请教~~~~
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcboyxhy 2005-04-02
  • 打赏
  • 举报
回复
可是我们的计算机是采用补码的。
而且int一般是4字节
不是半字节
jxliang 2005-04-02
  • 打赏
  • 举报
回复
我开始是这样想的:
x= 0001
~x=1110
|= 1111 ,而二进制的1111正好是十进制的15,呵呵,位运算掌握得不好,见笑了~~~~
szws 2005-04-02
  • 打赏
  • 举报
回复
~x 取反
| 或运算
~x 与x或一下 得到-1
富莱工作室 2005-04-02
  • 打赏
  • 举报
回复
楼主为什么认为会是15呢? 说说看, 呵
pcboyxhy 2005-04-02
  • 打赏
  • 举报
回复
x= 0000 0000 0000 0000 0000 0000 0000 0001
~x=1111 1111 1111 1111 1111 1111 1111 1110
|= 1111 1111 1111 1111 1111 1111 1111 1111

第一个1是符号位。
这个是补码表示
所以值就是
-(~1111 1111 1111 1111 1111 1111 1111 1111+1) = -1

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧