首页 > 解决方案 > 为什么 [1111 1111] 在 Integer 中表示为 -1 而不是 255?

问题描述

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

在此处输入图像描述

并且不返回值 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”

标签: c#.netintsbyte

解决方案


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

见这篇文章: https ://en.wikipedia.org/wiki/Two%27s_complement

如果您使用 Unsigned int,它的行为与我认为您期望的一样。

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


推荐阅读