C#中的程序:
short a, b;
a = 10;
b = 10;
a = a + b; // Error : Cannot implicitly convert type 'int' to 'short'.
// we can also write this code by using Arithmetic Assignment Operator as given below
a += b; // But this is running successfully, why?
Console.Write(a);
Run Code Online (Sandbox Code Playgroud) 为什么char在C#中添加两个结果int?
例如,当我这样做时:
var pr = 'R' + 'G' + 'B' + 'Y' + 'P';
Run Code Online (Sandbox Code Playgroud)
的pr变量变成int类型.我希望它是string一个值为的类型"RGBYP".
为什么C#这样设计?是不是添加两个chars 的默认实现应该导致一个string连接chars,不是int?
为什么以下引发编译时错误:'无法将类型'int'隐式转换为'byte':
byte a = 25;
byte b = 60;
byte c = a ^ b;
Run Code Online (Sandbox Code Playgroud)
如果我使用算术运算符,这将是有意义的,因为a + b的结果可能大于可以存储在单个字节中的结果.
然而,将其应用于XOR运算符毫无意义.这里是一个按位操作,它永远不会溢出一个字节.
在两个操作数周围使用转换:
byte c = (byte)(a ^ b);
Run Code Online (Sandbox Code Playgroud) //key & hash are both byte[]
int leftPos = 0, rightPos = 31;
while(leftPos < 16) {
//possible loss of precision. required: byte, found: int
key[leftPos] = hash[leftPos] ^ hash[rightPos];
leftPos++;
rightPos--;
}
Run Code Online (Sandbox Code Playgroud)
为什么Java中的两个字节的按位运算会返回一个int?我知道我可以把它转回到字节,但它看起来很傻.
以前我今天尝试添加两个ushorts,我注意到我必须将结果反馈给ushort.我认为它可能会成为一个uint(以防止可能的意外溢出?),但令我惊讶的是它是一个int(System.Int32).
是否有一些聪明的理由或者是因为int被视为'基本'整数类型?
例:
ushort a = 1;
ushort b = 2;
ushort c = a + b; // <- "Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)"
uint d = a + b; // <- "Cannot implicitly convert type 'int' to 'uint'. An explicit conversion exists (are you missing a cast?)"
int e = a + b; // <- Works!
Run Code Online (Sandbox Code Playgroud)
编辑:就像GregS的回答所说,C#规范说两个操作数(在这个例子中是'a'和'b')应该转换为int.我对为什么这是规范的一部分的根本原因感兴趣:为什么C#规范不允许直接对ushort值进行操作?
如果我有两个byte小号a和b,怎么来的:
byte c = a & b;
Run Code Online (Sandbox Code Playgroud)
关于将byte转换为int会产生编译器错误?它这样做,即使我把一个显式类型转换前面a和b.
另外,我知道这个问题,但我真的不知道它是如何应用的.这似乎是一个返回类型的问题operator &(byte operand, byte operand2),编译器应该能够像任何其他运算符一样进行排序.
在c ++中,这段代码可以工作:
char c='a';
int r=2;
c+=r;
Run Code Online (Sandbox Code Playgroud)
这将做同样的事情c='c'.我怎样才能在c#中做同样的事情?
我必须使用WinForms在VS2008 .net 3.5中使用以下代码:
byte percent = 70;
byte zero = 0;
Bitmap copy = (Bitmap)image1.Clone();
...
Color oColor = copy.GetPixel(x, y);
byte oR = (byte)(oColor.R - percent < zero ? zero : oColor.R - percent);
Run Code Online (Sandbox Code Playgroud)
当我离开(byte)最后一行代码的" "时,我收到编译器错误,说它"无法隐式转换类型int"到' byte'.如果一切都是类型byte并且byte是整数类型...那么我为什么需要演员?
我有这样的方法:
void Method(short parameter)
{
short localVariable = 0;
var result = localVariable - parameter;
}
Run Code Online (Sandbox Code Playgroud)
为什么结果Int32而不是Int16?
我收到错误"无法将类型'int'隐式转换为'byte'.存在显式转换(您是否错过了转换?)".不是byte + byte = byte吗?当我删除+rgb.Green它工作时我也注意到了
// rgb.Red, rgb.Green, rgb.Blue are byte types
// h, delta are double
rgb.Red = Convert.ToByte(Math.Round((h - 4) * delta)) + rgb.Green;
public struct RGBColor
{
public byte Red { get; set; }
public byte Green { get; set; }
public byte Blue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)