проблема в unsigned long long в c ++ - PullRequest
2 голосов
/ 15 апреля 2011

у меня есть файл cpp, скажем xyz.cpp, который содержит длинные константы.Теперь мне нужно изменить длинные константы на длинные длинные.

ex   
long a=0x00000001

на

long long a=0x0000000000000001

для будущих целей.(я использую компилятор gcc) Но когда я это делаю, я получаю сообщение об ошибке «целочисленное значение слишком велико, чтобы содержать длинное значение».при просмотре через Интернет, я получил предложение типа использования,

long long a=0x0000000000000001ULL .

, который работал нормально.но проблема в том, что у меня есть jar-файл, который нужно преобразовать .cpp в .java.когда он пытается преобразовать файл .java из файла .cpp, он не распознает ULL.

теперь мой вопрос

1, к этому сценарию, это в любом случае для моего gccкомпилятор, чтобы заставить принимать длинные длинные значения, вместо добавления ULL @ конец 2, или предложить мне, что я должен делать в .java файле, чтобы принять это длинное длинное значение (ULL) (я знаю, что у java есть только длинное значение, которое может содержать длинные длинныезначение)

заранее спасибо:)

Ответы [ 3 ]

1 голос
/ 15 апреля 2011

Поскольку C ++ не будет компилироваться как java без изменения источника, вы могли бы просто удалить суффикс ULL / LL (и изменить long long на long). Вам просто нужно добавить это в список вещей, которые нужно изменить при конвертации - я не вижу проблемы?

0 голосов
/ 15 апреля 2011

long может содержать 64-битную версию в Java с подписанным поведением там, где это важно. Однако это не мешает вам хранить в нем беззнаковые 64-битные значения. Вам нужно написать обходные пути для определенных операций, но +, -, *, ==,! = И т. Д. Все работают точно так же.

0 голосов
/ 15 апреля 2011

Итак, что именно вы пытаетесь сделать, конвертировать код C ++ в Java?

Java не имеет целочисленных типов без знака, и тип "long long" из C ++ также не существует в Java. Java имеет следующие целочисленные типы:

byte - 8-разрядное целое число со знаком

short - 16-разрядное целое число со знаком

int - 32-разрядное целое число со знаком

long - 64-разрядное целое число со знаком

(Существует также char, который технически является 16-разрядным целым числом без знака, но предназначен для хранения символьных данных).

Вы можете использовать BigInteger в Java, если вам нужно работать с числами, которые не вписываются в long.

...