Глядя на систему дополнений двух с математической точки зрения, это действительно имеет смысл. [10]
Пример: 63 - 24 = x
Добавим дополнение к 24, которое действительно справедливо (100 - 24). В дополнение к этому, идея состоит в том, чтобы по существу «изолировать» разницу.
). Итак, все, что мы делаем, это добавление 100 по обе стороны от уравнения.
Теперь уравнение равно 100 + 63 - 24 = x + 100, поэтому мы удаляем 100 (или 10 или 1000 или что-то еще).
Из-за неудобной ситуации, заключающейся в том, чтобы вычесть одно число из длинной цепочки нулей, мы используем систему «уменьшенного радиального дополнения» в десятичной системе, дополнение девяти.
Когда нам присваивается число, вычитаемое из большой цепочки из девяток, нам просто нужно отменить числа.
Пример: 99999 - 03275 = 96724
Это является причиной, после дополнения девяти мы добавляем 1. Как вы, наверное, знаете из детской математики, 9 становится 10 путем «кражи» 1. Таким образом, в основном это всего лишь десять дополнений, которые берут 1 из разницы.
In Двоичное, дополнение двух равнозначно десятому дополнению, в то время как дополнение к дополнению девяти. Основное отличие состоит в том, что вместо того, чтобы пытаться изолировать разницу с степенями десяти (добавив 10, 100 и т. Д. В уравнение), мы пытаемся изолировать разницу с степенями двух.
Это для по этой причине мы инвертируем биты. Точно так же, как наш minuend представляет собой цепочку из девяток в десятичной форме, наш minuend является цепочкой из двоичных.
Пример: 111111 - 101001 = 010110
Поскольку цепочки из них равны 1 ниже хорошей силы двух, они «крадут» 1 из разницы, как в девяти, в десятичной форме.
Когда мы используем отрицательные двоичные числа, мы действительно просто говорим:
0000 - 0101 = x
1111 - 0101 = 1010
1111 + 0000 - 0101 = x + 1111
. Чтобы «изолировать» x, нам нужно добавьте 1, потому что 1111 - это один от 10000, и мы удаляем ведущий 1, потому что мы просто добавили его к исходной разности.
1111 + 1 + 0000 - 0101 = x + 1111 + 1
10000 + 0000 - 0101 = x + 10000
Просто удалите 10000 с обеих сторон, чтобы получить x, это базовая алгебра.
Выяснилось, что вы на правильном пути, но мне пришлось установить свойства UserAgent и Refer в HttPWebRequest. Я думаю, Facebook хочет убедиться, что вы не бот
public static T Get<T>(string uri)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.UserAgent = "Mozilla / 5.0(Windows; U; WindowsNT 5.1; en - US; rv1.8.1.6) Gecko / 20070725 Firefox / 2.0.0.6";
request.Referer = "http://www.google.com";
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string json = reader.ReadToEnd();
Object result = new JavaScriptSerializer().Deserialize<T>(json);
return (T)result;
}
}
}