Какое максимальное значение для int32? - PullRequest
1380 голосов
/ 18 сентября 2008

Я никогда не могу вспомнить номер. Мне нужно правило памяти.

Ответы [ 50 ]

2 голосов
/ 30 ноября 2011

Вот как я помню ...
В шестнадцатеричном формате цифра представляет четыре бита, поэтому 4 * 8 = 32, поэтому максимальный 32-разрядный бит со знаком равен:

0xFFFFFFFF >> 1 # => 2147483647
2 голосов
/ 10 апреля 2017

Используя REPL в Java 9, jshell :

$ jshell
|  Welcome to JShell -- Version 9-Debian

jshell> System.out.println(Integer.MAX_VALUE)
2147483647
1 голос
/ 18 апреля 2019

Используйте свое воображение!

Закройте глаза и увидите старого одноногого китайского фермера Вана, который, несмотря на свои недостатки, стал самым богатым и могущественным пастухом в Китае (а значит, и во всем мире). Его семья состоит из него самого, его жены, четырех сыновей и овчарки Алисы. Однажды он собрал их всех на бесконечном травяном поле, покрытом миллионами своих овец, и сказал:

Я стар и устал. Поэтому я решил разделить свое богатство между сыновьями.

Он указал на всех овец:

Это, мои дети, все ваши. Каждый из вас получает 123456789 белых овец, 10101010 черных овец, 203040 пятнистых овец, 444888 ягнят и 12000 баранов. Собаку я оставлю для себя. Вот что я сказал.

Он оперся на плечо своей жены и улыбнулся.

Итак ... друг мой, представь себе эту картинку! Представьте это как можно ярче и реальнее! Заставь его жить на глазах!

Тогда встаньте на колени ... и начните считать! Количество ног в этом поле является максимальным значением для int32.

Существует два известных недостатка описанного метода:

  1. Человеческое воображение не знает границ ... поэтому трудно ограничить себя и представить точное количество овец на этом поле, не создавая больше овец, пока вы подсчитываете ноги.
  2. Люди ленивы ... поэтому многие люди пытаются просто сосчитать овец и умножить на четыре вместо того, чтобы сосчитать ноги, но ... угадайте, что - они заснули.
1 голос
/ 10 января 2019

Я всегда просто заглядываю в Вавилонскую библиотеку, собрание всевозможных текстов с английским алфавитом.

Ссылка на конкретную страницу конкретной книги по конкретному шельду в определенном разделе находится здесь: https://libraryofbabel.info/bookmark.cgi?max_int32

1 голос
/ 18 января 2014

Вы найдете в двоичном формате максимальное значение Int32 1111111111111111111111111111111 но в десяти из них вы найдете 2147483647 или 2 ^ 31-1 или Int32.MaxValue

1 голос
/ 28 июля 2017

В общем, вы могли бы выполнить простую операцию, которая отражает саму природу Int32, заполнить все доступные биты 1 - это то, что вы можете легко сохранить в своей памяти. Он работает в основном одинаково в большинстве языков, но я собираюсь использовать Python для примера:

max = 0
bits = [1] * 31 # Generate a "bit array" filled with 1's
for bit in bits:
    max = (max << 1) | bit
# max is now 2147483647

Для беззнаковых Int32 сделайте его 32 вместо 31 1.

Но так как опубликовано еще несколько авантюрных подходов, я начал думать о формулах, просто для удовольствия ...

Формула 1 (числа объединяются, если оператор не указан)

  • a = 4
  • b = 8
  • ба / а
  • абы-1
  • аЬ
  • абы-абы
  • абы-1

Python quickcheck

a = 4
b = 8
ab = int('%d%d' % (a, b))
ba = int('%d%d' % (b, a))
'%d%d%d%d%d' % (ba/a, ab-1, ab, ab-a-b, ab-1)
# gives '2147483647'

Формула 2

  • х = 48
  • х / 2-3
  • х-1
  • х
  • х * 3/4 ​​* * тысяча сорок шесть
  • х-1 * * тысяча сорок восемь

Python quickcheck

x = 48
'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1) 
# gives '2147483647'
0 голосов
/ 07 июля 2011

Это очень легко запомнить. В шестнадцатеричном формате одна цифра составляет 4 бита. Поэтому для unsigned int пишите 0x и 8 f s (0xffffffff) в оболочку Python или Ruby, чтобы получить значение из базы 10. Если вам нужно значение со знаком, просто помните, что старший бит используется как знак. Таким образом, вы должны оставить это. Вам нужно только помнить, что число, где младшие 3 бита равны 1, а 4-й бит равен 0, равно 7, поэтому пишите 0x7fffffff в оболочку Python или Ruby. Вы также можете написать 0x100000000 - 1 и 0x80000000 - 1, если вам легче запомнить.

0 голосов
/ 27 июня 2016
max_signed_32_bit_num = 1 << 31 - 1;  // alternatively ~(1 << 31)

Компилятор все равно должен оптимизировать его.

Я предпочитаю 1 << 31 - 1, чем

0x7fffffff потому что вам не нужно считать f с

unsigned( pow( 2, 31 ) ) - 1 потому что вам не нужно <math.h>

0 голосов
/ 26 октября 2016

Это 2 ^ 31 - 1 (32 бита, один используется для знака).

Если вы хотите приблизительное значение, используйте 2 ^ 10 = 1024 ~ 10 ^ 3, поэтому 2 ^ 31 ~ 2 * 10 ^ 9. Если вы хотите вычислить точное значение вручную, используйте возведение в квадрат, возведя в квадрат, чтобы получить 2 ^ 32 = 2 ^ (2 ^ 5) и разделить на два. Вам нужно только возвести квадрат в пять раз, чтобы получить 2 ^ 32:

2*2 = 4
4*4 = 16
16*16 = 256
256*256 = 25*25*100 + 2*250*6 + 36 = 62500 + 3000 + 36 = 65536
65536*65536 =65000*65000 + 2*65000*536 + 536*536 =  
4225000000 + 130000*536 + (250000 + 3600 + 36*36) =
4225000000 + 69680000 + 250000 + 3600 + 1296 =
4294967296

деление этого числа на два и вычитание одного дает 2147483647. Если вам не нужны все цифры, а нужно только сказать, первые три значащие цифры, вычисления на каждом шаге возведения в квадрат очень просты.

0 голосов
/ 07 февраля 2017

В С используйте INT32_MAX после #include <stdint.h>. В C ++ используйте INT32_MAX после #include <cstdint>.

Или INT_MAX для размера, определенного для платформы, или UINT32_MAX или UINT_MAX для unsigned int. См http://www.cplusplus.com/reference/cstdint/ и http://www.cplusplus.com/reference/climits/.

Или sizeof(int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...