Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这项作业在c#中是如何完成的?_C# - Fatal编程技术网

这项作业在c#中是如何完成的?

这项作业在c#中是如何完成的?,c#,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,第

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

一个字节只能增加到255。对于256,代码会自动换行为0,对于257,代码会自动换行为1,以此类推


最高有效位被丢弃,剩下的就留给你了。

一个字节最多只能达到255位。对于256,代码会自动换行为0,对于257,代码会自动换行为1,以此类推


最高有效位将被丢弃,剩下的就剩下了。

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

byte = int % 256

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

byte = int % 256

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


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

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


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

255是可以在单个
字节中表示的最大值:

十六进制代码:
FF

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

01 00

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

00


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

255是可以在单个
字节中表示的最大值:

十六进制代码:
FF

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

01 00

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

00


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

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

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

请仔细阅读我的问题,然后给我投反对票!!!感谢第一个不需要将
bytenumber
设置为
1
,尽管它可能会。如果在启用溢出检查的情况下编译,它不会将
字节数设置为任何值,它将抛出异常。第二个也一样。@Hava:好的,我已经做到了。谢谢你的建议。请仔细阅读我的问题,然后给我投反对票!!!感谢第一个不需要将
bytenumber
设置为
1
,尽管它可能会。如果在启用溢出检查的情况下编译,它不会将
字节数设置为任何值,它将抛出异常。第二个也一样。@Hava:好的,我已经做到了。谢谢你的建议。这是净效果,但不是如何计算。@ LukGrimeTt C++标准定义了这个答案中描述的等效转换,但是几乎没有人反对高比特丢弃。只有当C#规范说高位被丢弃时,它才被解释为模运算。反正是一样的:)真的。他没有问有关MSB的问题,他只是想知道它是如何工作的,这是最简单的答案。@EZSlaver-这个最简单的答案扩展到将负整数转换为字节有多好?@hvd-我的观点是,简单地说,人们最初可能认为-1%256=-1,然后要求对如何计算转换进行额外的解释。此外,使用%操作符(通常是昂贵的操作)来解释该转换可能会向某些人传达,将字节转换成字节是计算昂贵的(不是)。这是净效应,但不是如何计算。@ LukGrimeTt C++标准定义了这个答案中描述的等效转换,但是几乎没有人会反对说高位被丢弃。只有当C#规范说高位被丢弃时,它才被解释为模运算。反正是一样的:)真的。他没有问有关MSB的问题,他只是想知道它是如何工作的,这是最简单的答案。@EZSlaver-这个最简单的答案扩展到将负整数转换为字节有多好?@hvd-我的观点是,简单地说,人们最初可能认为-1%256=-1,然后要求对如何计算转换进行额外的解释。此外,使用%运算符(一个通常昂贵的操作)解释转换可能会向某些人传达转换为字节在计算上是昂贵的(事实并非如此)。