求解!C语言数组的基础计算理解问题

img

这个怎么理解呢
11111111111111111111111111111

x[1]=2+1-3=0
下标从0开始数

54321的下标分别为01234 x[1]=x[3]+x[4]-x[2]==>x[1]=2+1-3=0
01234

  • 建议你看下这篇博客👉 :C语言字符串转十六进制以及各种类型转换
  • 除此之外, 这篇博客: 【C语言】万字肝爆!建议收藏!深度剖析数据在内存中的存储中的 第二题: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 2.
    #include <stdio.h>
    int main()
    {
    char a = -128;
    printf("%u\n",a);
    return 0;
    }
    

    答案是:4294967168

    解析:

    a的原码:10000000000000000000000010000000
    a的反码:11111111111111111111111101111111
    a的补码:11111111111111111111111110000000

    因为a是char类型,所以a里面存放的应该是8个bit位: 10000000
    以%u形式输出出来,要发生整形提升,看见a是char类型是有符号的,高位补1,得到:11111111111111111111111110000000,最后发现是以%u的类型打印出来,可%u是无符号类型,就意味着,这是个正数,正数的原反补相同,所以是168结尾的大数字
    在这里插入图片描述