下面简单代码的输出不理解?

来源:百度知道 编辑:UC知道 时间:2024/07/04 02:52:11
#include<iostream>
#include<math.h>
using namespace std;
void main()
{

unsigned int r;

r=-10;
printf("r=%u",r);
cout<<endl;

}输出结果为什么是r=4294967286

unsigned是无符号数,而对于负数,如果使用unsigned的话,会转换成它的补码形式。
在机器中存放一个数有原码,反码,补码3种形式。其中原码和补码比较常用。它们的第一个二进制位是符号位,用来表示这个数是正还是负。其中0表示正,1表示负。
负数的补码是它的原码各位取反再+1,-10的补码,因为是负数,第一个二进制位是1,最后写出来就是4294967286
呃。。我语言表达比较差。。希望你能看懂。。

是补码的问题,因为是unsigned类型,无符号,故把-10求补码后再显示。

在32位机上,unsigned int 占的位数为32位,范围从0到4294967295。你把-10赋绘r,相当于溢出(????),把4294967295当作-1开始往后数,就得到你那个结果。
呵呵,我这个菜鸟就只能回答到这里了!!!!只作抛砖引玉!