鉴于以下代码:
byte x, xmin, xmax, xstep;
x = (x + xstep < xmax ? x + xstep : xmax)
Run Code Online (Sandbox Code Playgroud)
编译告诉我
Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)
从byte到int的转换发生在哪里?为什么?
分解.我们有
sum = expression
Run Code Online (Sandbox Code Playgroud)
Sum的类型为byte.什么是表达方式?分解.表达是
summand1 + summand2
Run Code Online (Sandbox Code Playgroud)
Summand1的类型为byte.summand2是什么类型的?分解.它是:
test ? consequence : alternative
Run Code Online (Sandbox Code Playgroud)
测试类型为bool.替代是字节类型.什么类型的后果?分解吧!它是:
summand3 + summand4
Run Code Online (Sandbox Code Playgroud)
那是字节+字节.字节+字节是int,因此结果是int类型.
现在我们有足够的信息来计算出summand2的类型.结果是int,替代是byte,而int是这两种类型中更常见的.(因为每个字节都可以转换为int,但不是每个int都可以转换为byte.)
因此summand2的类型是int.所以我们总和等于一个字节加一个int.Byte plus int是int,因此我们将int分配给byte.哪个是显式转换,而不是隐式转换.
根据MSDN,在bytea中添加一个byte结果:int
例如,考虑以下两个字节变量x和y:
Run Code Online (Sandbox Code Playgroud)byte x = 10, y = 20;以下赋值语句将产生编译错误,因为赋值运算符右侧的算术表达式默认情况下计算为int.
Run Code Online (Sandbox Code Playgroud)// Error: conversion from int to byte: byte z = x + y;要解决此问题,请使用强制转换:
Run Code Online (Sandbox Code Playgroud)// OK: explicit conversion: byte z = (byte)(x + y);
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |