JAVA INT BYTE 的问题

问1:
1个INT是4个字节,那意思是byte[4] 可以代表一个INT对吗
问2:
如果byte[4]可以代表一个INT,那一个byte是8位可以存储-128-127的数字(第一位是符号位)
那这样的话,INT最大值应该是:01111111011111110111111101111111=2139062143咯
但是用Integer.MAX_VALUE得出2147483647=01111111111111111111111111111111

所以我迷茫了,这个byte第一位是符号位到底怎么解释呀,为啥INT最大值(2147483647)第一位是0呀?

2个回答

你好,是这样的,我们在理解这个问题时,如果要追根到底,那就是要了解计算机中内存的概念。
首先,int a = 2;那么表示呢计算机在内存地址(假设是0x0001)处放了一个2,而计算机只认识二进制,所以在地址0x0001处能放了10(二进制),假设内存32位的,那么在地址0x0001处的二进制是00000000 00000000 00000000 00000010,这个空间就是int a所占的地址空间,那么这个空间的最大数就是01111111 11111111 11111111 11111111,最小数11111111 11111111 11111111 11111111
而对于byte[4] 这是数组,数组里面的每一个数都是byte类型,每一个数都要占1个字节 也就是八位,也就是说假设byte数组的起始地址是0x0001,那么呢,0x0002、0x0003,0x0004放的都是byte类型的数。
byte和int表示的是两种数据类型,byte有byte的规则 int有int的规则,请问你怎么样把byte[4]转化成int?
如果你说byte[4]里面的每个元素如果是01111111转化成int时当成11111111,那还不是可以表示,但是事实上是很少会这么做的

stagezm
Stagezm 回复-无-怨-无-悔-: 嗯,byte[4]不能代表1个INT ,那问题就说的通了,谢谢大神
2 年多之前 回复
chenhande1990chenhan
-无-怨-无-悔- 回复Stagezm: 首先 你的问题是如果byte[4]可以代表一个INT 既然知道是如果 那么现实是不是可以的。一般而言是不可以,原因就int和byte是不同的数据类型。如果你要强装到里面去,那你就按照自己的规则装 ,这个规则只有你的代码知道,你拿出来时也按照你的规则取
2 年多之前 回复
stagezm
Stagezm 大神你好,你的回答,前段部分我理解了,不过,我就想问,1个INT是4个字节,那一个BYTE是1个字节,那BYTE[4]可以代表一个INT咯,但问题是Interger.MaxValue 2147483647 装不进byte[4]里去啊,因为一个BYTE最大127即01111111
2 年多之前 回复
stagezm
Stagezm 大神你好,你的回答,前段部分我理解了,不过,我就想问,1个INT是4个字节,那一个BYTE是1个字节,
2 年多之前 回复

Integer是java的一个类,int是数据类型,请楼主不要搞混

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!