Как мне объявить 64-битный unsigned int в dart / flutter?

#flutter

Вопрос:

Для приложения мне нужен 64-битный unsigned int . Просматривая документацию по dart, я не видел, как именно объявить его.

Кто-нибудь может сказать мне, как это делается? Я буду использовать этот «64-битный unsigned int» в побитовой операции.

Ответ №1:

У Dart нет собственного 64-разрядного целого числа без знака.

Для многих операций вы можете просто использовать 64-разрядное целое число со знаком, которым является an int , и интерпретировать его как беззнаковое. Это те же биты. Однако это не будет работать с разделением. (И если это для Интернета, то an int — это число JavaScript, и вам нужно сделать что-то совершенно другое).

Самый простой общий подход — использовать BigInt и использовать toUnsigned(64) после выполнения каких-либо операций над ним.

Комментарии:

1. я понимаю, что в 64-битной подписи int один из битов зарезервирован для знака, и только 63 бита доступны для хранения значения. Мне нужно, чтобы все 64 бита использовались для значения.

2. Моя точка зрения, которую я, возможно, не очень хорошо понимаю, заключается в том, что биты одинаковы. 64-битное целое число со знаком не резервирует бит для знака, это представление с дополнением 2, где набор наиболее значимых битов делает число отрицательным, но по модулю 2 ^ 64 это все равно то же число, что и беззнаковая интерпретация тех же битов. Для многих операций результат не зависит от того, интерпретируются ли эти 64 бита как подписанные или неподписанные. В конце концов, это будет иметь значение, хотите ли вы распечатать результат или хотите разделить или выполнить правильные сдвиги. Если вам это нужно, используйте BigInt .

3. Спасибо, похоже, я должен использовать BigInt , поскольку мне нужно использовать сдвиги.

4. Я согласен. Когда Dart вернет >>> оператор, вы также сможете обрабатывать неподписанные сдвиги, но его еще нет.

5. Даже для краткости мы должны использовать int?

Ответ №2:

Просто используйте fixnum

Вы можете легко создать int64 с помощью Int64()