一个数据类型为什么还要分有符号和无符号啊,真心累啊。
主要目的还是为了省空间!省空间!省空间!(当然,还有为了配合计算机指令运算效率的原因,这里不深入)。
举个自然语言的例子吧:我们给了4个空间来表示一个数字。
如果我们规定这个数是非负数(无符号),那么,这4个空间可以表示的范围是0000 ~ 9999。
如果我们规定这个数是可正、可负、可零(有符号),那么这4个空间里面就得留一个符号的空间,那么这4个空间可以表示的范围就是-999 ~ +999。
也就是同样的空间,无符号的数据类型可以表示更大的范围。否则,同样的范围,采用有符号的数据类型,就需要更多的空间。
简单点说,unsigned无符号数据类型,对比同类型的signed有符号类型,节省了一个符号占位, 同样的空间大小表示的数据范围更大
。
那char、short、int、long,既没有明确是unsigned 、signed类型,那到底是有符号还是无符号的?
先说正常的short、int、long,没有指明的情况下,默认是有符号的。也就是short和signed short是一样的。
而char是一个骨骼奇异的品种,在没有特别指明是unsigned、signed类型时, 有的地方是有符号的,有的地方是无符号的
。
而float、double默认就是有符号的,且没有无符号类型,也就是只有可正、可负、可零的类型。
|