OC

Knowledge OS
主帖 6 条回复

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

chenyu chenyu · 2014年05月27日 · 阅读 4 · 更新于 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 条
#1
玉楼
2014年05月27日

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

#2
听见花开
2014年05月27日

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

#3
manzhiyong
2014年05月27日

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

#5
董一凡
2014年05月27日

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

登录 或者 注册