有符号数赋给无符号数后得到一个很大的值,他的转换过程是什么样的?
chenyu
由 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日
你去看一下负数的二进值不就知道了。
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日
你其实可以再考虑一下,负数的二进制为什么要表达成这样,有什么优势。
6楼
·
小时候可帅啦
回复于 2014年06月01日
signed int 的第一位表示为正负.