有符号和无符号数分析
发布日期:2021-07-01 04:36:39 浏览次数:2 分类:技术文章

本文共 1337 字,大约阅读时间需要 4 分钟。

有符号数和无符号数

       学习了二进制数据,我们知道,在计算机系统中,存储的任何数据都是以二进制数据的格式存储。存储数据的最小单位是字节(Byte),一个字节的容量是八位(bit),可以存储8个二进制数据。在讲解“有符号数”和“无符号数”之前,我们先来举一个例子。

       例如,有个人(称呼A)去爬山,半路上碰到朋友,朋友送了他一瓶水,此时A手上拥有一瓶水;那么,如果A觉得渴了,那他就把这瓶水喝掉。如果A觉得不渴,那他就可以把这瓶水丢掉。

       在这个例子中,可以类比有:

(1) 人员A就如同一个计算机系统;

(2) 人员A手上拿有一瓶水,就如同计算机内存的一个字节中存储有一个数值;

       人员A手上的那瓶水永远是一瓶水,不会有任何变化。但是,人员A可以根据自己渴和不渴这个条件,可以把手上的水当做有用的水喝掉,或者是没用的水丢掉。

       同理,在计算机系统中,可以把内存中存储的数值当做有“符号数”和“无符号数”来看待。

       有符号数的定义是:字节的最高位作为符号位,其余的是数值位。例如一个字节中存储的二进制数为1100 1000,最高位1作为符号位,其余的7为 100 1000 作为数值为。

       那么,符号位占据1位,就有0和1这样的两种数值,就有:

(1) 如果符号位为0,那么字节中存储的数值是正数;

(2) 如果符号位为1,那么字节中存储的数值是负数;

       对于1100 1000这样的二进制数据,符号位是1,就表示负数。在有符号数中,表示负数的算法是:

(1) 把数值位中存储的二进制数据,每个位都取反,就是原来为0的值变为1,原来为1的值变为0;

(2) 给对取反后的二进制数据加1,得到的数值就得到负数值;

       所以,有符号数可以表示正数,也可以表示负数。

       无符号数的定义是:没有符号位,所有的位数都是数值位。所以表示的都是正数。

       例如1100 1000这个数值,如果作为有符号数看待,那么符号位是1,数值位是100 1000。所以,符号位是1,所以,这个数据是负数。然后,表示成十进制时,对数值位的操作是:

(1) 数值位取反,得到011 0111;

(2) 对取反后的数值 011 0111加1得到011 1000,数值位的值为56;

       那么,1100 1000这个二进制数据表示为“有符号数”时,就是-56这个数值。

       如果作为无符号数看待,那么,就没有符号位,所有的位数都是数值位,所以11001000都作为数值位,表示的十进制数值是180。

       例如,0111 0011这个数值,如果当做“有符号数”看待,那么,其符号位是0,所以,表示整数,数值位是115,所以,表示正115这个数值。如果当做无符号数看待,所有位都是数值位,计算得到115这个数值,所以,表示正115。所以我们可以总结:

(1) 无符号数,总是表示正数。所有位数都表示数值位。

(2) 有符号数,可以表示正数和负数,最高位是符号位,其余位都是数值位。如果符号位是0,则表示正数;如果符号位是1,则表示负数。对于负数的表示方法是:数值位全部取反,再加1,得到的数值就是负数值。

更多的交流可以加QQ:1523520001,微信:13926572996,备注:linux编程;

学习、分享更多的linux C/C++ 编程知识。

转载地址:https://mylinux.blog.csdn.net/article/details/89203389 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ASCII码
下一篇:二进制、十进制、十六进制换算

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月15日 04时50分29秒