Почему Convert.ToString ((sbyte) -128, 2) предшествует 1? - PullRequest
3 голосов
/ 21 октября 2011

Насколько я понимаю, не существует перегрузки ToString, которая занимает sbyte, и она явно передается как короткая.Но откуда взялись эти ведущие 1?

Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));

>1111111110000000

Спасибо, Джибе

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Ваше понимание совершенно верно.

1 вызваны тем, что называется " расширение знака ".Это побочный эффект от того, как 2s дополнение работает двоичная арифметика.

0 голосов
/ 21 октября 2011

Вы на самом деле вызываете перегрузку Convert.ToString, определенную как:

Convert.ToString(short value, int base)

Байт со знаком использует первый бит в качестве знака - вы сначала неявно преобразуете его в короткое, которое из-за способадвоичный файл хранится с добавлением единиц для поддержания негатива.(т. е. 10000000 в виде sbyte - это -128 в двоичном формате).

...