C# 字节到整数的转换
我在数学和代码转换过程中遇到了一些麻烦。我知道它是怎么得到那个总数的,但为什么它变成了负数C# 字节到整数的转换,c#,type-conversion,C#,Type Conversion,我在数学和代码转换过程中遇到了一些麻烦。我知道它是怎么得到那个总数的,但为什么它变成了负数 static void Main(string[] args) { short numb1 = 30000, numb2 = 30000; short answer = (short)Add(numb1, numb2); Console.WriteLine("{0} + {1} = {2}", numb1, numb2, answer); NarrowingAttempt(
static void Main(string[] args)
{
short numb1 = 30000, numb2 = 30000;
short answer = (short)Add(numb1, numb2);
Console.WriteLine("{0} + {1} = {2}", numb1, numb2, answer);
NarrowingAttempt();
Console.ReadLine();
}
static int Add(int x, int y)
{
return x + y;
}
static void NarrowingAttempt()
{
byte myByte = 0;
int myInt = 200;
myByte = (byte)myInt;
Console.WriteLine("Value of myByte: {0}", myByte);
}
这将返回:
30000 + 30000 = -5536
帮助不大?30000+30000=60000,但short只能表示-32768~32767(-2^15~2^15-1) 因此,发生溢出,并返回60000-65536(2^16)=-5536 您必须了解,您处理的所有值实际上都是计算机内部的二进制形式 短类型用16位或2字节表示。 二进制形式的30000为0111 0101 0011 0000,且 二进制形式的60000是1110 1010 0110 0000,只有最后16位用于表示短值 要理解将这个二进制值转换成十进制值,您必须对的_补码有一些了解,但简而言之,它变成了-5536。
65536源于这样一个事实:65536(2^16)的倍数在二进制形式的末尾至少有16'0。2*16是什么意思?它只是意味着65536是2乘以16的幂(2^16,2**16等)