转换数学后面的字节为int

时间:2017-02-02 06:25:01

标签: 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();
    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

很少帮忙?

1 个答案:

答案 0 :(得分:1)

30000 + 30000 = 60000,但短只能代表-32768~32767(-2 ^ 15~2 ^ 15 - 1)

因此,发生溢出,并返回60000 - 65536(2 ^ 16)= - 5536

您必须明白,您处理的所有值实际上都是计算机内的二进制形式。

短类型用16位或2字节表示。 二进制形式的30000是0111 0101 0011 0000,和 二进制形式的60000是1 1110 1010 0110 0000,并且只有最后16位用于表示短值。

要理解将此二进制值转换为十进制值,您必须对https://en.wikipedia.org/wiki/Two's_complement有一些了解,但简而言之,它转向-5536。 65536来自这样的事实:65536(2 ^ 16)的倍数在二进制形式的末尾至少有16'0。