有符号数和无符号数知识点总结以及代码实验
c语言之—有符号数和无符号数
1.计算机中的符号位
数据类型的最高位用于标识数据的符号
—最高位是1,表明这个数为负数;
—最高位是0,表明这个数为正数。
2.有符号数的表示法
在计算机内部用补码表示有符号数
—正数的补码为正数本身。
—负数的补码为负数的绝对值 各位取反后加上1。
3.无符号数的表示法
在计算机内部用原码表示无符号数
—无符号数默认为正数;
—无符号数没有符号位。
对于固定长度的无符号数
—MAX_VALUE + 1 --> MIN_VALUE
—MIN_VALUE + 1 -->MAX_VALUE
4.signed和unsigned
C语言中变量默认为有符号数的类型。
unsigned关键字声明变量为无符号类型。
C语言中只有整数类型能够声明unsigned变量
5.小结
1.有符号数用补码表示
—正数的符号位为0;
—负数的符号位为1;
2.无符号数用原码表示
—无符号数没有符号位;
—无符号数只用于表示正数;
3.unsigned 只能修饰整数类型的变量
当无符号数与有符号数混合计算时,会将 有符号数 转换成无符号数后再进行计算,结果为无符号数。
6.代码实验截图
1.当无符号数遇见有符号数

注释
这段代码分别设置了一个有符号整形变量和无符号整形变量j和i,当无符号变量i和有符号变量j进行混合运算时,有符号数会转换成无符号数再进行计算。所以-10会转换成无符号数进行运算,由于-10的最高位是1,且在内存中的形式是反码之后再加上1,因此会变得非常大,所以I+j会大于0.
2.错误使用了unsigned

注释
2.错误使用了unsigned
注释
这段代码之所以会出现这个现象,是因为错误的将变量i定义成了无符号的整形,而在上文中我们已经知道,对于无符号数来说,MAX_VALUE + 1 --> MIN_VALUE,且MIN_VALUE + 1 -->MAX_VALUE,所以在无符号变量i从初值9进行循环时,从零会直接跃迁到最大值,出现了上述代码的编译现象
