有符号数赋给无符号数后得到一个很大的值,他的转换过程是什么样的?

chenyu 发布于 2014年05月27日 | 更新于 2014年06月01日
无人欣赏。
#include <iostream>

int main(int argc, const char * argv[]) {

// insert code here...
int a = -7;
unsigned b = 2;
b = a;
std::cout << b << std::endl;
return 0;

}

得到的结果是:4294967289
环境:C++、Mac OS X系统。
求解,4294967289是怎么来的?

共6条回复
玉楼 回复于 2014年05月27日

你去看一下负数的二进值不就知道了。

听见花开 回复于 2014年05月27日

int a = -7 = -1 - 6 = (int)0xFFFFFFFF-6 = 0xFFFFFFF9
unsigned 0xFFFFFFF9 就是4294967289了。

manzhiyong 回复于 2014年05月27日

赞二楼~在我还在摊开纸笔准备算一把的时候,二楼已经给出了正确答案~

chenyu 回复于 2014年05月27日

非常感谢啊……@听见花开 @玉楼

董一凡 回复于 2014年05月27日

你其实可以再考虑一下,负数的二进制为什么要表达成这样,有什么优势。

小时候可帅啦 回复于 2014年06月01日

signed int 的第一位表示为正负.

登录 或者 注册