这项作业在c#中是如何完成的?
我的问题是,这个作业是如何在c#中发生的?我的意思是,它如何计算答案1(257),如何计算0(256) 代码是:这项作业在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,第
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,然后要求对如何计算转换进行额外的解释。此外,使用%运算符(一个通常昂贵的操作)解释转换可能会向某些人传达转换为字节在计算上是昂贵的(事实并非如此)。