我的问题是这个分配是如何在c#中发生的?我的意思是,它如何计算答案1(用257),它如何计算0(用256)?
代码是:
int intnumber=257;
byte bytenumber=(byte)intnumber;//the out put of this code is 1
int intnumber=256;
byte bytenumber=(byte)intnumber;//the out put of this code is 0
我的问题是发生了什么,第一个代码中的输出是:1,第二个代码中的输出是:0
答案 0 :(得分:10)
byte
仅占用内存中的一个字节。 int
占用内存中的4个字节。这是您提到的一些int值的二进制表示:
most significant least significant
255: 00000000 00000000 00000000 11111111
256: 00000000 00000000 00000001 00000000
257: 00000000 00000000 00000001 00000001
您还可以在将负int值转换为字节时查看其工作原理。当转换为字节时,-255的int值为1.
-255: 11111111 11111111 11111111 00000001
将int转换为字节时,只将最低有效字节赋值给字节值。忽略三个较高有效字节。
答案 1 :(得分:8)
单个字节最多只能达到255.代码包围为0表示256表示,1表示257表示等...
最重要的位被丢弃,剩下的就剩下了。
答案 2 :(得分:2)
255是可以在单个byte
中表示的最大值:
十六进制代码:FF
256不适合1个字节。需要2个小时才能代表:
01 00
因为你试图将该值放在byte
类型的变量中(当然可能只包含1个字节),所以第二个字节被“裁剪”掉了,只留下:
00
同样适用于257,实际上是任何值。
答案 3 :(得分:1)
1是因为字节值(最大255)的算术溢出超过2个单位。
分配0因为超过1个单位。
答案 4 :(得分:0)
byte
数据类型包含0到255之间的数字。将int
转换为byte
时,它会计算模数为256的数字。
byte = int % 256