1

我的问题是,这个任务是如何在 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

4

5 回答 5

10

Abyte在内存中只占用一个字节。一个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 转换为字节时,只有最低有效字节被分配给字节值。三个较高的有效字节被忽略。

于 2013-08-06T22:43:28.493 回答
8

单个字节最多只能达到 255。对于 256,代码会环绕到 0,对于 257,代码会环绕到 1,等等......

最重要的位被丢弃,剩下的就剩下你了。

于 2013-08-06T22:39:05.920 回答
2

255 是单个可以表示的最大值byte

十六进制代码:FF

256 不适合 1 个字节。需要 2 口来表示:

01 00

由于您试图将该值放入类型变量中byte(当然可能只包含 1 个字节),因此第二个字节被“裁剪”掉,只留下:

00

257 和实际上任何值都会发生同样的情况。

于 2013-08-06T22:42:18.470 回答
1

分配 1 是因为字节值(最大 255)的算术溢出超过 2 个单位。

分配 0 是因为超出 1 个单位。

于 2013-08-06T22:41:02.277 回答
0

byte数据类型包含一个介于 0 到 255 之间的数字。将 an 转换为时intbyte它会计算模 256 的数字。

byte = int % 256
于 2013-08-06T22:39:59.617 回答