素材牛VIP会员
int占4字节,一数占一字符,为什么int能表示5位以上的数字?
 38***38  分类:Java代码  人气:1717  回帖:17  发布于6年前 收藏

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

讨论这个帖子(17)垃圾回帖将一律封号处理……

Lv6 码匠
素***2 学生 6年前#1

int 存的是数 不是char

Lv4 码徒
go***le 学生 6年前#2

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

Lv5 码农
Am***ze JS工程师 6年前#3

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

Lv4 码徒
go***le 学生 6年前#4

1字节(Byte) = 8 bit 一个 int类型 = 32bit 所以可以最多表示2^32 * 2个数

Lv4 码徒
日***天 职业无 6年前#5

简单的说就是:
前者总共有32个格子,每个格子可以有两种情况,
后者总共只有4个格子,每个格子有十种情况(0到9),
一个是2的32次方,一个是10的4次方,你把底数和幂数都换了,结果肯定不一样。
前者的其实也就是计算机里的二进制,后者的思维变成了我们所日常使用的十进制。

具体点说就是:
ascii码中包含256个字符,包括数字和英文字母、符号等,数字只占其中的10个(0到9)。
那么为什么ascii可以表示那么多字符呢?
你应该知道的(不知道就没办法了),一个ascii码占一个字节,而一个字节有八个比特位。
每个比特位只有两种情况,0和1,那么8个比特位组合起来,就应该是:
2 X 2 X 2 X 2 X 2 X 2 X 2 X 2 = 2的8次方 = 256
也就是8个比特位总共能表示256种情况,如果把这256种情况分别全用来表示数字的话,就可以表示0到255这256个数字。

好,这个如果你理解了,那么理解int就容易了,int有4个字节,这是前提你也知道。
前面解释了,一个字节可以表示256种情况,那么4个字节按照前面的算法就为:
256 X 256 X 256 X 256 = 2的8次方 X 2的8次方 X 2的8次方 X 2的8次方 = 4 294 967 296
也就是4个字节可以表示 4 294 967 296 种情况,如果一种情况用来表示一个数字,那么就可以用来表示 0到4 294 967 295 了。

你前后属于偷换概念了,你后面把问题变成了:
10 10 10 * 10 = 10 的4次方 = 10000
结果当然只能表示4位数了。

Lv2 入门
一***句 职业无 6年前#6

ascii里面是用数字表达字符串的,而数字存到内存中是在ascii的前面一个级别,你可以简单的这样理解:
内存(0和1)=>数字(通常也可以直接为其他进制)=>汉字或者字母(各种进制所表达的最终展示)

他们不是一个级别的概念。

Lv4 码徒
日***天 职业无 6年前#7

计算机真正存储的都是二进制,一个字节有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实际上是字符串来的。

Lv6 码匠
su***an JAVA开发工程师 6年前#8

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

Lv2 入门
蒙***生 职业无 6年前#9

感觉好傻的问题。。。,,字节和存储几位数肯定不是两个概念啦

Lv4 码徒
朱***叶 UI设计师 6年前#10

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

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取