关于0x01和~0x01

crashrobin 2011-02-14 08:24:47
说实话,我不清楚这个问题发到这里对不对,因为我是用C#做的测试,但这个问题我又又是在学习单片机的时候出现的
请各位帮帮忙解答一下
情况一:无符号数
uint temp1 = 0x01;
uint temp2 = ~temp1;
textBox1.Text = temp1.ToString() + "\r\n" + temp2.ToString();
这里输出的是1和4294967294,就是按位取反,这个我是能理解的

但是

情况二:有符号数
int temp1 = 0x01;
int temp2 = ~temp1;
textBox1.Text = temp1.ToString() + "\r\n" + temp2.ToString();
这里输出的是1和-2,符号我也能理解,但为什么是-2呢?
...全文
1055 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky12312388 2011-02-14
  • 打赏
  • 举报
回复
负数存的是补码,
所以
int temp1 = 0x01;
int temp2 = ~temp1;
(temp2)二进制 = 1111 1111 1111 1111 1111 1111 1111 1110
转换成原码就是 1000000000000010 = -2
crashrobin 2011-02-14
  • 打赏
  • 举报
回复
谢谢回答,我弄明白了
羽飞 2011-02-14
  • 打赏
  • 举报
回复
1楼讲的很清楚,这都是补码,转换成源码LZ就清楚了
liutengfeigo 2011-02-14
  • 打赏
  • 举报
回复
0 01
1 10
xwfde 2011-02-14
  • 打赏
  • 举报
回复
11111111111111111111111111111110就是-2,111111111111111111111111111111是-1,这个不要搞错了

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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