为什么[1111 1111]在整数中表示为-1而不是255?

时间:2019-04-29 06:07:22

标签: c# .net int sbyte

我按照规则进行数字符号替换:一点一点地反转,然后加1,但是我使用的不是整数sbyte的整数数据类型。编译器如何理解我正在更改符号

enter image description here

而不返回值255?

        int operand1 = 0, operand2 = 0;
        int result;

        operand1 = 0x01;                            // [0000 0001]
        result = ~operand1;                         // [1111 1110]
        result++;                                   // [1111 1111]

        Console.WriteLine(" ~ {0} + 1 = {1} ", operand1, result);

输出: “〜1 +1 = -1”

1 个答案:

答案 0 :(得分:2)

有符号和无符号整数。带符号的整数可以包含负值,因此,范围的“上”部分从(0-(int.max / 2))向下计数。

请参阅此文章: https://en.wikipedia.org/wiki/Two%27s_complement

如果您使用Unsigned int,则其行为符合我的预期。

在带符号整数中,最高位确定其是否为负值。