short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码应该是一个(低效)示例,它在C#中交换短(带符号的16位整数)的字节序.
但是上面的代码不会编译,因为C#在以下两行中隐式地从short转换为int:
第一种情况:
short test1 = ((value >> 8) & 0xFF);
Run Code Online (Sandbox Code Playgroud)
第二种情况:
return (test1 | test2);
Run Code Online (Sandbox Code Playgroud)
为什么要进行演员表演?我是否可以通过简短的回归来实现预期的结果?像这样:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
Run Code Online (Sandbox Code Playgroud)
如果不是为什么不呢?
请注意,我确实理解为什么C#在执行左位移时将短路转换为整数,因此分配了test2变量.
我被震撼知道有没有算术运算符+,-,*,/,并%在C#中8个和16位整数.我正在阅读第23页的"C#5.0 Pocket Reference",如下所示.

以下代码无法编译.
class Program
{
static void With16Bit()
{
short a = 1;
short b = 2;
short c = a + b;
Console.WriteLine(c);
}
static void With8Bit()
{
byte a = 1;
byte b = 2;
byte c = a + b;
Console.WriteLine(c);
}
static void Main(string[] args)
{
With8Bit();
With16Bit();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么C#设计师会这样做?他们对此有何看法?
在C#(3.5)中,我尝试以下方法:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
Run Code Online (Sandbox Code Playgroud)
我得到错误132:"不能隐式地将类型'int'转换为'byte'.存在显式转换(你是否错过了演员?)".|也是如此 和^.
我究竟做错了什么?为什么要问我关于整数?为什么我不能在字节上做布尔逻辑?
我有这个问题:
SELECT *
FROM transaction t
JOIN transactionDetail toTrans ON t.id = toTrans.tId and toTrans.FlowDirection= 1
JOIN transactionDetail fromTrans ON t.id = fromTrans.tId and fromTrans.FlowDirection= 0
Run Code Online (Sandbox Code Playgroud)
我试着用匿名类型重建,为解释在这里.
byte toFlow = 1;
byte fromFlow = 1;
from trans in data.Transactions
join toTrans in data.TransactionDetails on new {trans.id, toFlow} equals new {toTrans.tId, toTrans.FlowDirection}
join fromTrans in data.TransactionDetails on new { trans.id, fromFlow } equals new { fromTrans.tId, fromTrans.FlowDirection }
Run Code Online (Sandbox Code Playgroud)
Flowdirection总是1或0,所以我使用的是toFlow字节.但是,这会给出错误:
join子句中某个表达式的类型不正确.
根据这个答案,名称和类型都需要匹配.这意味着:
byte FlowDirection= 1;
from trans in …Run Code Online (Sandbox Code Playgroud) 我有3个变量都声明为'Int16'类型,但这段代码拒绝工作.
private Int16 _cap; // Seat Capacity
private Int16 _used; // Seats Filled
private Int16 _avail; // Seats Available
public Int16 SeatsTotal {
get {
return _cap;
}
set {
_cap = value;
_used = _cap - _avail;
}
}
Run Code Online (Sandbox Code Playgroud)
除了我所在的部分_used = _cap - _avail;抛出此错误,错误
1无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)
是否有一些正式标准不允许人们在C#中使用具有两个字符的^或XOR函数?
public char[] XORinput(char[] input, char SN)
{
int InputSize = input.Length;
//initialize an output array
char[] output = new char[InputSize];
for (int i = 0; i < InputSize; i++)
{
output[i] = input[i] ^ SN;
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,此代码都给我这个错误,错误1400无法将类型'int'隐式转换为'char'.存在显式转换(您是否错过了演员?)
这没有任何意义.
呼叫者:
string num = "12345";
char SN = Convert.ToChar(num);//serial number
string sCommand = ("Hellow");
char[] out = new char[sCommand.ToCharArray().Length];
out = calculator.XORinput(sCommand.ToCharArray(), SN);
Run Code Online (Sandbox Code Playgroud) 该unchecked关键字已在MSDN库中解释为:
unchecked关键字用于抑制整数类算术运算和转换的溢出检查.在未经检查的上下文中,如果表达式生成的值超出目标类型的范围,则不会标记溢出.
根据定义,它在int类型上运行良好.
例如:
unchecked
{
int i=2147483647+10;
}
Run Code Online (Sandbox Code Playgroud)
这里它抑制了未经检查的块内的溢出.(它应该是)
但是当我们在字节上应用它时它不起作用
byte b1=100,b2=100,b3;
unchecked
{
b3=b1+b2;//error here
}
Run Code Online (Sandbox Code Playgroud)
因此,应该抑制在未经检查的环境中编写的任何内容.
为什么它会给出编译时错误?
或者我根本不理解未经检查的关键字?
byte op1 = 20;
sbyte op2 = 30;
var result = op1 & op2;
Run Code Online (Sandbox Code Playgroud)
我知道&运营商返回bool,但我现在已经收费了.
为什么等于结果20?为什么结果是Int32?
鉴于以下代码:
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的转换发生在哪里?为什么?
我正在使用C++,发现有不同种类的C++,如CLR,Win32,MFC ......
此外,我发现一些C++库可以在其他一些C#程序中调用.怎么会这样?
由于人们认为C++比C#更快,因为它不需要平台来运行它,但是,如果在CLR中使用C++,它是否会因为需要.Net框架而变慢?
问题是:我想创建一个调用windows命令并返回输出的C++库,这个库可以在其他C#程序中调用.有可能这样做吗?如果是的话,C++库是否需要.Net框架并且运行速度较慢?
我试图将图像的红色值增加百分之五十.这是我的代码:
public static Bitmap IncreaseRedFiftyPercent(Bitmap b)
{
Bitmap temp = (Bitmap) b;
Bitmap bmap = (Bitmap)temp.Clone();
Color c;
for (int i = 0; i < bmap.Width; i++)
{
for (int j = 0; j < bmap.Height; j++)
{
c = bmap.GetPixel(i, j);
byte increase = c.R + c.R * 0.5; //This line gives error
bmap.SetPixel(i, j, Color.FromArgb(increase, c.G, c.B));
}
}
b = (Bitmap)bmap.Clone();
return b;
}
Run Code Online (Sandbox Code Playgroud)
这就是我所做的:我读取图片的所有像素,并将红色值增加百分之五十,并保持蓝色和绿色相同.但行
byte increase = c.R + c.R * 0.5; //This line gives error …Run Code Online (Sandbox Code Playgroud)