java什么是有符号、无符号

半兽人 发表于: 2018-08-13   最后更新时间: 2018-08-13 14:52:26  
{{totalSubscript}} 订阅, 2,802 游览

有符号与无符号的概念

最明显的区别就是二者表示的范围不同

  • 无符号数中,所有的位都用于直接表示该值的大小。
  • 有符号数中最高位用于表示正负,所以,当为正值时,该数的最大值就会变小。

我们举一个字节的数值对比:

无符号数: 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。

原因是有符号数中的最高位被挪去表示符号了

并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一下子减半。

不过,有符号数的长处是它可以表示负数。

因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。

我们仍一个字节的数值对比:
无符号数: 0 ----------------- 255
有符号数: -128 --------- 0 ---------- 127

同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是-128。

所以二者能表达的不同的数值的个数都一样是256个。

只不过前者表达的是0到255这256个数,后者表达的是-128到+127这256个数

有符号数包括负数,无符号数只有整数而已,在同一数据类型中,由于内存长度是一样的,所以无符号数比有符号数的最大值大1倍。

对于java

那对于java的数据类型,只有有符号的数据类型,如short 的表示范围 -128到+127,这就是代表有符号的数据类型了。

java没有无符号类型,都是有符号类型的数据类型。



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容



查看java更多相关的文章或提一个关于java的问题,也可以与我们一起分享文章
提问