读书人

求教一个看起来简单的有关问题(多谢)

发布时间: 2013-04-21 21:18:07 作者: rapoo

求教一个看起来简单的问题(谢谢)
unsigned int a = 2;
int b = 5;
cout<<a-b;

求教输出的结果?为什么?谢谢 c/c++
[解决办法]
4294967293。。因为结果为一个unsigned int,而2-5=-3下溢出了,结果是2^32-3
[解决办法]
unsigned类型转换 是隐式的
[解决办法]
解决办法
1.


int a = 2;
unsigned int b = 5;
std::cout<<(int)(a-b);


2. 避免混合类型

int a = 2;
int b = 5;
std::cout<<(int)(a-b);

[解决办法]
a在内存中的二进制存储是0000 0000 0000 0000 0000 0000 0000 0010,
b在内存中的二进制存储是0000 0000 0000 0000 0000 0000 0000 0101,
如果a是有符号的int型,那么a-b后得到1111 1111 1111 1111 1111 1111 1111 1101(如果不明白,可以去看原码补码反码的相关知识)。这么多111组成的二进制,在有符号数中,第一个1表示负数,所以就是-3.
但是现在是无符号,所以第一个1就不表示负数了。于是这便是一个正数,用二进制加法求十进制的话,这个数就等于上面2楼3楼的前辈说的4294967293

[解决办法]
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

读书人网 >C++

热点推荐