你好我写了一个小程序来演示我面临的问题
long n;
n = 1; //1=0001 //2=0010 //-2=1101
Console.WriteLine(n+" "+ ~n);
Console.WriteLine(n+~n);
,输出如下:
1 -2
-1
据我所知〜符号应该给出相同的负数,但我得到的数字总是比原始数字多一个 根据以下链接我必须得到的答案应该是相同的,如果我将否定添加到原始数字我应该得到0而不是另一个数字 http://visualcsharptutorials.com/reference/converting-negative-numbers-to-binary
谁能告诉我它有什么问题? 我正在使用.net 4.5,c#5.0,vs 2012
答案 0 :(得分:1)
您所描述的系统称为ones' complement,而不大多数现代环境(包括C#)中使用的系统。使用的是two's complement。在这个系统中,-1是1111,-2是1110等。这意味着你得到的数字是正确的,因为~1 == -2
。