2013-03-11 2 views
0

Я пытаюсь написать самое большое значение int64 в командной строке. Я попытался использовать 0x1111111111111111, который является 16, и визуальная студия говорит, что это int64. Я бы предположил, что это будет int16. Что здесь пропало?Int64 кажется слишком коротким в C#

+4

Этот формат представляет собой шестнадцатеричное число. Каждая цифра - * четыре * бита, а не одна. –

+0

Вам не хватает 0xFF ... FF, и вы также игнорируете подписанный/неподписанный –

+0

, или вы также можете попробовать Int64.MaxValue –

ответ

6

0x является префиксом для шестнадцатеричных, а не бинарных литералов. Это означает, что бинарное представление вашего номера является 0001000100010001000100010001000100010001000100010001000100010001

Там нет, к сожалению, нет бинарных литералов в C#, так что вы должны либо сделать расчет самостоятельно (0xFFFFFFFFFFFFFFFF) или использовать Convert класс, например:

short s = Convert.ToInt16("1111111111111111", 2); // "2" for binary 

для того, чтобы просто получить наибольший Int64 номера, вам не нужно выполнять какие-либо расчеты самостоятельно, так как он уже доступен для вас в этой области:

Int64.MaxValue 
+2

Вы забыли о дополнении 2 и подписали против беззнакового. Int64.MaxValue на самом деле '0x7FFFFFFFFFFFFFFF'. –

0

Наибольшее значение Int64 - Int64.MaxValue. Для того, чтобы напечатать это в шестнадцатеричном, попробуйте:

Console.WriteLine(Int64.MaxValue.ToString("X")); 
3

Буквальный 0x1111111111111111 является шестнадцатеричным числом. Каждая шестнадцатеричная цифра может быть представлена ​​четырьмя битами, так что 16 шестнадцатеричных цифр вам нужно 4 * 16 = 64 бит. Вероятно, вы намеревались написать двоичный номер 1111111111111111. Вы можете преобразовать из двоичной символьной строки в целое число, используя следующий код:

Convert.ToInt16("1111111111111111", 2) 

Это будет возвращать нужное число (-1).

Чтобы получить самый большой Int64 вы можете использовать Int64.MaxValue (0x7FFFFFFFFFFFFFFF) или, если вы действительно хотите беззнаковое значение, которое вы можете использовать UInt64.MaxValue (0xFFFFFFFFFFFFFFFF).

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