基本类型
编译系统分配给int型数据两个字节或4个字节(由具体的C编译系统自行决定)。
在储存单元中的储存方式是:用整形的补码形式存放。一个正数的补码是此数的2进制形式。
5的补码
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
负数在如何储存
如果是负数,则应先求出负数的补码,方法是将此数的绝对值写成2进制模式,再对其所有二进位按位取反,再加1。
5的原码
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
按位取反
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0
再加一就是(-5)的原码
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
考试题目
在大学考试中,常常会考到这方面的知识,如下面这题
新建main函数,按照要求从键盘输入两个数据,1和6,两个数据要求用分号分开;
按照无符号(%u)和有符号(%d)输出两个数的差(1-6)。
#include<stdio.h>
int main()
{
int x, y;
scanf_s("%d;%d", &x, &y);
printf("%u;%d", x - y, x - y);
return 0;
}
输出结果:
我们可以看到输出结果为:
4294967291;-5
vs2022分配给int型数据4个字节;将4294967291转换为2进制可得
11111111111111111111111111111011
为-5的补码。
常常会有同学将有符号和无符号理解为无符号就是数据为正数,其实无符号输出就是按数据2进制形式输出,不考虑原码,补码。