C# 为什么[1111111]在整数中表示为-1而不是255?
我根据规则进行数字符号替换:逐位反转,然后加1,但我使用的是整数数据类型,而不是sbyte。编译器如何理解我正在更改符号 不返回值255C# 为什么[1111111]在整数中表示为-1而不是255?,c#,.net,int,sbyte,C#,.net,Int,Sbyte,我根据规则进行数字符号替换:逐位反转,然后加1,但我使用的是整数数据类型,而不是sbyte。编译器如何理解我正在更改符号 不返回值255 int operand1 = 0, operand2 = 0; int result; operand1 = 0x01; // [0000 0001] result = ~operand1;
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-(int.max/2))开始计数,然后向下计数 见本文: 如果使用无符号int,它的行为与我认为的一样
在有符号整数中,最高位决定其是否为负值。比较字节和整数中的位,您将得到答案,但答案是什么?您说的是“反转所有位”,而不是“反转最低8位”,因此uint也可以解决此“问题”。请参见: