#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()