这就不得不讲到计算机对数据的存储了。计算机的数据是需要空间(内存)来存储的,大小不同的数据所需要占用的计算机空间是不一样的。
类似,我们把大小不同的数据记录在本子上,10和100000000所占用的纸张空间大小也是不一样的。
为了节省空间,我们把需要处理的数据分为不同的类型,占用空间小的就用小空间的类型,比如,数字10,就可以用char类型只占1个字节空间,当然,数字10也可以用int类型占4个字节空间,但造成了空间浪费。
比如,生活中需要装0.45升的水,用1升的瓶子可以,用4升的瓶子也可以,但这样就浪费了很多不必要的空间了。
简单的说,定义这么多的数据类型,就是告诉计算机,我这个数可能会有多大,比帮我预留多大的空间。
好了,到这了。 又新出来unsigned、signed这两个又是什么东东?
解释: 在C语言中,unsigned和signed是用来指定变量是有符号的还是无符号的修饰符。
signed:表示变量是有符号的。这意味着它可以存储正数、负数和零。
unsigned:表示变量是无符号的。这意味着它只能存储非负数(包括零)。
主要目的还是为了省空间!省空间!省空间!(当然,还有为了配合计算机指令运算效率的原因,这里不深入)。
举个自然语言的例子吧:我们给了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类型时,有的地方是有符号的,有的地方是无符号的。
char类型到底是有符号还是无符号
而float、double默认就是有符号的,且没有无符号类型,也就是只有可正、可负、可零的类型。
关注公众号,加星标,回复1024获取学习资料,每天进步一点点。
声明:
本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。