linux 无符号整型,有符号数和无符号数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

学习了二进制数据,我们知道,在计算机系统中,存储的任何数据都是以二进制数据的格式存储。存储数据的最小单位是字节(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,得到的数值就是负数值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值