这个赋值如何在c#中起作用?

时间:2013-08-06 22:35:47

标签: c#

我的问题是这个分配是如何在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

5 个答案:

答案 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