加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 无符号整数数组如何包含负整数?

发布时间:2020-12-16 10:09:00 所属栏目:百科 来源:网络整理
导读:我编写这段代码只是为了看看如果我将一个负整数放入无符号整数数组中会发生什么. #include iostreamint main(){ using namespace std; unsigned int array[4]; array[0]=4; array[1]=4; array[2]=2; array[3]=-2; cout array[0] + array[1] + array[2] + arr
我编写这段代码只是为了看看如果我将一个负整数放入无符号整数数组中会发生什么.

#include <iostream>

int main()
{
    using namespace std;

    unsigned int array[4];
    array[0]=4;
    array[1]=4;
    array[2]=2;
    array[3]=-2;

    cout << array[0] + array[1] + array[2] + array[3] << endl;

    unsigned int b;
    b=-2;
    cout << b <<endl;

    return 0;
}

我希望在这两种情况下都会发生整数溢出.但是,仅在实际发生的第二种情况下.在第一种情况下,一切都表现得好像它是一个oridinary整数数组,而不是一个无符号整数数组.那么究竟发生了什么导致了这种异常行为.在任何重要的情况下,我的编译器都是gcc 4.8.谢谢您的帮助.编辑:这是我电脑上的输出

8
4294967294

解决方法

有一个整数溢出.这是原因(数字转换为unsigned int)

1111 1111 1111 1111 1111 1111 1111 1110 // -2
+0000 0000 0000 0000 0000 0000 0000 0100 //+ 4
-------------------------------------------
 0000 0000 0000 0000 0000 0000 0000 0010 //= 2
+0000 0000 0000 0000 0000 0000 0000 0100 //+ 4
-------------------------------------------
 0000 0000 0000 0000 0000 0000 0000 0110 //= 6
+0000 0000 0000 0000 0000 0000 0000 0010 //+ 2
-------------------------------------------
 0000 0000 0000 0000 0000 0000 0000 1000 //= 8 -> the result

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读