我按照规则进行数字符号替换:一点一点地反转,然后加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”
答案 0 :(得分:2)
有符号和无符号整数。带符号的整数可以包含负值,因此,范围的“上”部分从(0-(int.max / 2))向下计数。
请参阅此文章: https://en.wikipedia.org/wiki/Two%27s_complement
如果您使用Unsigned int,则其行为符合我的预期。
在带符号整数中,最高位确定其是否为负值。