Advertisement

有符号数和无符号数知识点总结以及代码实验

阅读量:

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进行循环时,从零会直接跃迁到最大值,出现了上述代码的编译现象

全部评论 (0)

还没有任何评论哟~