2016-11-04 2 views
-4

Теперь я хочу, чтобы напечатать на экране бинарную (база 2) представление ULONG (то есть что-то вроде 0000000000000000000000001, я знаю, что не хватает нулей).NET Улунг для представления двоичной строки?

Я просто заметил, что по какой-то причине нет Convert.ToString (ulong, base), что означает, что I может конвертировать длинный в base2 строковое представление, но я не могу сделать то же самое с ulong.

Есть ли какой-либо другой метод .net? Есть ли причина, почему этого метода нет? (метод существует для uint). Принесут ли они такой же результат?

Спасибо большое =)

ответ

3

Ну, вы могли бы написать Convert.ToString((long)value, 2);

Кастинг ulong к long не изменяет битовую последовательность на всех.

Насколько я помню, нет Convert методы, чтобы иметь дело с UInt64 или UInt32 потому Convert предназначен для CLS Compliant, и общие методы, которые имеют дело с беззнаковыми значениями не CLS-совместимые.

См. Common Language Specification.

Это не изменяет битовый рисунок. Рассмотрим:

ulong foo = 0x7FFFFFFFFFFFFFFF; 
Console.WriteLine(Convert.ToString((long) foo, 2)); 

foo = 0x8000000000000000; 
Console.WriteLine(Convert.ToString((long)foo, 2)); 

Выход:

111111111111111111111111111111111111111111111111111111111111111 
1000000000000000000000000000000000000000000000000000000000000000 

Обратите внимание, что первая строка имеет 63 бит. Высокий бит равен 0. Вторая строка имеет 64 бита. Высокий бит установлен правильно.

+0

Это устанавливает начальный бит в 1, даже если он выключен, не так ли? – Gaspa79

+0

@ Gaspa79: Я призываю вас попробовать и выяснить. –

+0

@EricLippert Я попробовал это, и вот что он делает, поэтому я прошу – Gaspa79

Смежные вопросы