C语言区分带不带符号问题

C语言底层机械层次区分带符号整数和不带符号整数吗,给出理由

带不带符合就看最高位,最高位就是符号位,1就是负数,0就是整数。

底层结构是指什么,int类型在内存中一般按照4字节(32位)进行存储,在计算机中所有的数据都是按照二进制进行储存的。
在字长为1个字节的机器上表示 int a = 1;unsigned int b = 1; 都是 0000 0000 0000 0000 0000 0000 0000 0001,没有任何区别。

#include <iostream>
using namespace std;

int main()
{
    int a = -1;
    cout << a << " " << (unsigned int)a << endl;
}

上面的C++代码运行结果为:

img

需要注意的是,C++中使用补码表示负数,因此-1对应的二进制为 1111 1111 1111 1111 1111 1111 1111 1111 ,当强制转换为无符号整数时,作为原码计算得到十进制数字:4294967295