计算机原理及基础 —— 有符号类型和无符号类型

1、是否需要有正负。

如果这个量不会有负值,那么我们可以使用无正负的类型。

分正负的类型,称为有符号类型;无正负的类型(只有正值),称为无符号类型。

2、使用二制数中的最高位表示正负。

(红色为最高位)

单字节数: 1111 1111

双字节数: 1111 1111 1111 1111

四字节数: 1111 1111 1111 1111 1111 1111 1111 1111

 

当一个数是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。

当一个数是有符号类型时,最高数称为“符号位”。为1时,表示该数为负值,为0时表示为正值。

 

3、无符号类型和有符号类型的范围区别。

无符号类型中,所有的位都用于直接表示该值的大小。我们举一个字节的数值对比:

无符号类型: 1111 1111   值:255        1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20

有符号类型: 0111 1111   值:127                    1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20

 

同样是一个字节,无符号类型的最大值是255,而有符号类型的最大值是127。原因是有符号类型中的最高位被挪去表示符号了。

有符号类型的长处是它可以表示负数。虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍用一个字节的数值对比:

无符号类型:                            0 -----------------------------255

有符号类型:        -128 --------- 0 ---------- 127

 

二者能表达的数值的个数都是256个。无符号类型表达的是 0~255 这256个数,有符号类型表达的是 -128 ~ 127这256个数。

有符号类型的负数使用补码表示。

 

 4. 原码、反码、补码

有 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

如果是 -5,在计算机中如何表示?    负数以补码表达。

 

(1)原码:一个整数,按照绝对值转换成的二进制数,称为原码。

比如 00000000 00000000 00000000 00000101 是5和-5 的原码。

 

(2)反码:原码按位取反,就是反码。

取反操作指:1变0; 0变1

00000101每一位取反,得11111010。

 

(3)补码:补码=反码+1。

00000101 的反码是:11111010。

补码 = 11111010 + 1 = 11111011

-5在计算机中表达为:11111011。转换为十六进制:0xFB。

 

我们来看int型整数-1在计算机中如何表示:

1、先得原码:  00000001

2、得反码:     11111110

3、得补码:     11111111

-1在计算机里用二进制表达就是全1。16进制为:0xFF。

 

====================================参考=========================================

1. 补码表:

二进制值(1字节)    十进制值
1000 0000    -128
1000 0001    -127
1000 0010    -126
1000 0011    -125
...    ...
1111 1110    -2
1111 1111    -1
 

-1是最大的负整数。

1111 1111 - 1 = 1111 1110,而1111 1110就是-2。

这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,最小的负值是1000 0000,也就是-128。

2. 不同字节数的整数中,如何表达-1这个数:

字节数    二进制值    十进制值
单字节数    1111 1111    -1
双字节数    1111 1111 1111 1111    -1
四字节数    1111 1111 1111 1111 1111 1111 1111 1111    -1

参考连接 : https://blog.csdn.net/android_bar/article/details/76571925 
 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值