java - int占4字节,一数占一字符,为什么int能表示5位以上的数字?
高洛峰
高洛峰 2017-04-18 09:26:53
0
16
1647

我知道这个问题~有点无厘头和傻乎乎。还是想请人解答一下~
----------可能目前脑子正处于抽风阶段----------
首先,我知道int占4个字节,包含正负2的31次方内的数字,也就是基本可以表示10位数字。
那么根据Ascll里,一个数字占用一个字节的规则来思考。
我让int按照这种规则来储存数字,是不是应该只能储存最多4位数字???
还请明白人~指出我这样思考的错误点在哪里?或者告知正确的解答方式~。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(16)
刘奇

字符和数值的表示方法是不同的,ascii码里面的数字不是数值,是用编码表示的字符,因此每个数字字符占7位(扩充的ascii码占8位)。比如12,,用ascii码表示为0110001 0110010(它表示的是一二两个数字字符组成的字符串,并没有十二的大小的涵义),,而用int则表示为00000000 00000000 00000000 00001010,它表示数值为十二的整数,一二两个数是不可分割的。。总之数值与字符在计算机内表示的方法是不同的,,int不是用ascii码表示的

左手右手慢动作

ascii里定义的是字符的表达方式,不是数字的表达方式,计算机存储数字和字符串的方式是不一样的。

巴扎黑

计算机真正存储的都是二进制,一个字节有8个比特位,用二进制表示,最大可表示11111111,即2的8次方-1,同理4个字节有32个比特位,最大可表示2的32次方-1,你去了解一下微机原理就懂了。同时由于第一位通常是符号位,表示正负,0为正,1为负,所以带符号数就是2的31次方-1。关于int,long,double等的字长是编译器的约定,比如早期16位机的int就是16个bit,最大值是65535,到了最近的VS版本,int都是4个字节32个bit位了。
刚才漏掉了ASCII编码的事情,一个ASCII码是占一个字符即8个bit, 你看看那个表就明白了,高4位和低四位来构成一张表,所以最多可以表示256个字符。ASCII实际上是字符串来的。

刘奇

感觉是两件事。int占4字节这个事能给你的限定是int能达到的最大值。而AscII说的一个数字占用的空间是一个字节,应该是物理空间,占了多大地方。这个空间理论上讲是可以无限大的,只要硬盘够用,可以无限的长。而int占4字节说的是能声明出来的值占的地方,声明的值达到一定上下限(正负2的31次方)就会溢出。不管你的硬盘多大,这个限定在形同的机器上是不会变的。我是这么理解的,不知道你能不能理解。

伊谢尔伦

ascii中的数字是指 '1',即字符的角度。角度不一样,完全就不能混为一谈了。

黄舟

ASCII 是编码规范,int 是表示的在内存中的存储类型。就好像一辆小轿车规定最多5个人,多了交警就会处罚你,这就是int,而里面做的是谁,叫什么,身份证号是啥,这就是ASCII码来规范的了。

刘奇

int = 4字节(Byte),而不是4比特位(bit)

1字节 = 8比特位(bit)

1个比特位 = 0或者1

1个字节 = 0-255


而现实生活中的十进制:
一位十进制 = 0-9
满10进1
二进制也是一样的
1bit = 0-1
满1进1
一个int 0 的二进制是: 00000000000000000000000000000000
+1的结果是啊: 00000000000000000000000000000001
再+1的结果是: 00000000000000000000000000000010
再+1的结果是: 00000000000000000000000000000100
再+1000: 00000000000000000000001111101011

黄舟

一二和十二是两个不同的概念。1个字节是8位二进制数,所以int可以表示2的31次方内的数。比如1212,如果是按照ASCII来存储,就是一二一二,如果是int存储,是一千二百一十二

刘奇

int 存的是数 不是char

伊谢尔伦

一个字节是8位
4个字节就是32位
所以int是32位
但int是有符号整数,
可以表示的最大数字是31个1
也就是2的31次方-1

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板