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

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

高洛峰
高洛峰

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

全部回覆(16)
刘奇

字符和數值的表示方法是不同的,ascii碼裡面的數字不是數值,是用編碼表示的字符,因此每個數字字符佔7位(擴充的ascii碼佔8位)。例如12,,用ascii碼表示為0110001 0110010(它表示的是一二兩個數字字元組成的字串,並沒有十二的大小的涵義),,而用int則表示為00000000 00000000 000000000 00表示數值為十二的整數,一二、兩個數是不可分割的。 。總之數值與字元在電腦內表示的方法是不同的,,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 的二進位是: 00000000000結果是00
再+1000: 00000000000000000000001111101011

黄舟

一二和十二是兩個不同的概念。 1個位元組是8位元二進位數,所以int可以表示2的31次方內的數。例如1212,如果是按照ASCII來存儲,就是一二一二,如果是int存儲,是一千二百一十二

刘奇

int 存的是數不是char

伊谢尔伦

一個位元組是8位元
4個位元組就是32位元
所以int是32位元
但int是有符號整數,
可以表示的最大數字是31個1
也就是2的31次方-1

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板