|
|
1
32
令人惊讶的是,当您对字节执行操作时,计算将使用
第二个代码段等效于:
正因为如此,你必须把结果放回原处
|
|
2
11
下面是CLI规范(Ecma 335)中的一个表的副本,该表指定了哪些操作数对类型为a op B的二进制数字运算符有效,其中a和B是操作数,“op”是运算符,如操作码.Sub在代码段中使用的:
这需要一些注释:
请注意的行和列 F级 与您的问题相关:还要注意byte、sbyte、char、short和ushort类型不存在。同样的方法,编译器将操作数转换为可以表示值的最小类型,以便可以使用运算符。是int32。根据表,操作的结果将是int32。 现在问题来了:结果是int32,但是将其赋回到字节值需要一个缩小的转换。从32位到8位。这是个麻烦,因为它会丢失大量的比特。C编译器要求您将其显式化。你基本上承认你知道你在做什么,并且你意识到潜在的令人惊讶的结果。就像这个:
-=运算符是一个问题,因为没有有效的方法应用所需的强制转换。它在语言语法中是不可表达的。使用(byte)3是没有意义的,文本会被转换成int32以使操作符工作。 他们解决了这个问题,编译器在没有你帮助的情况下自动发出强制转换。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |