c语言进制转换函数中负号数怎样转换成正号数

我们知道在c语言进制转换函数Φ存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言其本身并不区别有符号数和无符号数,因為在计算机里面都是0或者1但是在我们的实际使用中有时候需要使用有符号数来表示一个整数,因此我们规定当最高位为1的时,表示为負数最高位为0时,表示为正数

1:有符号数和无符号数在数值上的区别。

有符号数的最高位用来表示符号所以在最大的数值上,有符號数的最大值小于无符号数以一个字节为例:

有符号数的取值范围为:-128 — 0 — 127

无符号数的取值范围为:0 — 255

转换关系为:负数(正数) = 正数(负数)的补码 + 1;

最大值 - 当前值 +1;

3:正负数在计算机中的存储

在计算机中,并不存在所谓正负具体看下面的代码

原因是,当我们将 -1 通过强淛类型转换赋值给ux时此时ux变量所对应的地址,所存放的值是-1也就是0xFFFFFFFF,也就是说从存储的角度上讲,-1和在计算机的存储值都是0xFFFFFFFF关键昰你按怎样的方式去解析,

ux = -1;此时我们是按%d也就是有符号×××的方式去解析这个存储空间所对应的值所以得到的解析结果是-1;

ux = ,此时我們是按%u也就是无符号×××的方式去解析这个存储空间的值所以得到的最高位就是数值位,而不是符号位

解析过程如下,这里假设int类型為一个字节(4个字节也是一样的原理只是数值更大而已)

综上所述,计算机中的存储方式并不区分正负关键在于程序员用什么方式去解析这块存储空间(地址)的值。

}

我要回帖

更多关于 c语言进制转换函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信