计算机中有符号和无符号(计算机世界里的)
学习了二进制数据,我们知道,在计算机系统中,存储的任何数据都是以二进制数据的格式存储。存储数据的最小单位是字节(Byte),一个字节的容量是八位(bit),可以存储8个二进制数据。在讲解“有符号数”和“无符号数”之前,我们先来举一个例子。
例如,有个人(称呼A)去爬山,半路上碰到一个朋友,朋友送了他一瓶水,此时A手上拥有一瓶水;那么,有如下的情况:
(1) 如果A觉得渴,那么,A觉得手上的这瓶水很宝贵,就把这瓶水喝掉;
(2) 如果A觉得不渴,那么,A觉得手上的这瓶水很重,麻烦,就丢掉;
(3) A手上的那瓶水,永远是那瓶水,本身没有任何变化。但是,A以不同的角度来看这瓶水,那么,会得到不同的结果。
在这个例子中,可以进行比较,如下:
(1) 人员A就如同一个计算机系统;
(2) 人员A手上拿有一瓶水,就如同计算机内存中,一个字节存储的一个数值;
(3) 例如,在内存的一个字节中存储255这个整数值。那么,一个字节中的255这个数值,永远是255,不会有任何改变。但是,计算机系统把255这个数值,以不同的角度来看待,会有不同的结果。
那么,在计算机系统中,可以把内存中存储的数值当做“有符号数”和“无符号数”来看待。同一个数值,以不同的角度来看待,有不同的结果。
下面,我们来看看计算机系统对“有符号数”和“无符号数”的处理。
有符号数的定义是:字节的最高位作为符号位,其余的是数值位。例如一个字节中存储的二进制数为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,得到的数值就是负数值。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com