数据类型的有符号和无符号
一个数据类型为什么还要分有符号和无符号啊,真心累啊。主要目的还是为了省空间!省空间!省空间!(当然,还有为了配合计算机指令运算效率的原因,这里不深入)。
举个自然语言的例子吧:我们给了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默认就是有符号的,且没有无符号类型,也就是只有可正、可负、可零的类型。
通常是最上面一位 数据类型的有符号和无符号一定要注意 其实一般都按照有符号数进行计算比较合适 对于整数,正负还好理解。对于小数,涉及二进制变换的,才头疼。 数值的计算,源于需求。 从 空间效率 和 计算效率 的角度来看,它确实有其存在的必要性。 说实在的,不会处理有符号数 同样的存储空间(比如 8 位),无符号的能多表示一倍的正整数。 无符号没有负数的“负担”,所以同样空间可以“多装点数据”。
页:
[1]