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

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

Ответы [ 50 ]

45 голосов
/ 18 сентября 2008

Просто возьмите любой приличный калькулятор и введите «7FFFFFFF» в шестнадцатеричном режиме, а затем переключитесь на десятичную.

2147483647.

35 голосов
/ 27 ноября 2012

Это примерно 2.1 * 10^9. Не нужно точно знать 2^{31} - 1 = 2,147,483,647.

C

Вы можете найти его в C так:

#include <stdio.h>
#include <limits.h>

main() {
    printf("max int:\t\t%i\n", INT_MAX);
    printf("max unsigned int:\t%u\n", UINT_MAX);
}

дает (ну без ,)

max int:          2,147,483,647
max unsigned int: 4,294,967,295

C ++ 11

std::cout << std::numeric_limits<int>::max() << "\n";
std::cout << std::numeric_limits<unsigned int>::max() << "\n";

Java

Вы можете получить это и с Java:

System.out.println(Integer.MAX_VALUE);

Но имейте в виду, что целые числа Java всегда подписаны.

Python 2

Python имеет произвольные целые числа точности. Но в Python 2 они отображаются на целые числа C. Так что вы можете сделать это:

import sys
sys.maxint
>>> 2147483647
sys.maxint + 1
>>> 2147483648L

Поэтому Python переключается на long, когда целое число становится больше, чем 2^31 -1

33 голосов
/ 08 мая 2013

Вот мнемоника для запоминания 2 ** 31, вычтите единицу, чтобы получить максимальное целочисленное значение.

* * А тысяча два = 1, B = 2, с = 3, d = 4, е = 5, F = 6, г = 7, ч = 8, I = 9
Boys And Dogs Go Duck Hunting, Come Friday Ducks Hide
2    1   4    7  4    8        3    6      4     8

Я использовал силы от двух до 18 достаточно часто, чтобы помнить их, но даже я не удосужился запомнить 2 ** 31. Это слишком легко рассчитать по мере необходимости или использовать константу, или оценить как 2G.

31 голосов
/ 04 декабря 2013

32 бита, один для знака, 31 бит информации:

2^31 - 1 = 2147483647

Почему -1?
Поскольку первое - ноль, то наибольшее значение - это число минус один .

РЕДАКТИРОВАТЬ для cantfindaname88

Число равно 2 ^ 31, но наибольшее не может быть 2147483648 (2 ^ 31), потому что мы считаем от 0, а не от 1.

Rank   1 2 3 4 5 6 ... 2147483648
Number 0 1 2 3 4 5 ... 2147483647

Другое объяснение только с 3 битами: 1 для знака, 2 для информации

2^2 - 1 = 3

Ниже всех возможных значений с 3 битами: (2 ^ 3 = 8 значений)

1: 100 ==> -4
2: 101 ==> -3
3: 110 ==> -2
4: 111 ==> -1
5: 000 ==>  0
6: 001 ==>  1
7: 010 ==>  2
8: 011 ==>  3
30 голосов
/ 18 сентября 2008

Ну, он имеет 32 бита и, следовательно, может хранить 2 ^ 32 различных значений. Половина из них отрицательны.

Решение - 2 147 483 647

А самый низкий - -2 147 483 648.

(Обратите внимание, что есть еще одно отрицательное значение.)

28 голосов
/ 13 марта 2014

На данный момент, я бы сказал, что самая простая мнемоника - это набрать "stackoverflow.com" TAB"максимум int32" в Chrome.

Там где-то есть шутка о переполнении стека. Я просто не такой придурок.

23 голосов
/ 15 июля 2017

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

Вам нужно разбить ваш номер на части из 3-4 цифр и запомнить их визуально, используя проекцию на клавиатуре вашего мобильного телефона. Проще показать на картинке:

enter image description here

Как видите, с этого момента вам просто нужно запомнить 3 фигуры, 2 из которых выглядят как тетрис L, а одна - как галочка . Что, безусловно, намного проще, чем запоминание 10-значного числа.

Когда вам нужно вспомнить номер, просто вспомните фигуры, представьте / посмотрите на клавиатуру телефона и спроецируйте фигуры на нее. Возможно, вначале вам придется взглянуть на клавиатуру, но после небольшой практики вы вспомните, что цифры идут сверху вниз, справа внизу, и вы сможете просто представить это себе в голове.

Просто убедитесь, что вы помните направление фигур и количество цифр в каждой форме (например, в примере 2147483647 у нас есть 4-значный Tetris L и 3-значный L).

Вы можете использовать эту технику, чтобы легко запомнить любые важные цифры (например, я запомнил 16-значный номер кредитной карты и т. Д.).

21 голосов
/ 24 марта 2015

Сначала напишите 47 дважды, (вам нравится Агент 47 , верно?), Оставляя пробелы, как показано (каждая черта - это слот для одной цифры. Сначала 2 слота, затем 4)

--47----47

Думаю, у вас на руках 12 (потому что 12 = дюжина). Умножьте его на 4, первую цифру номера агента 47, т.е. 47, и поместите результат справа от первой пары, которая у вас уже есть

12 * 4 = 48
--4748--47 <-- after placing 48 to the right of first 47

Затем умножьте 12 на 3 (чтобы сделать вторую цифру номера Агента 47, то есть 7, вам нужно 7 - 4 = 3) и поместите результат справа от первых 2 пар, последняя пара-слот

12 * 3 = 36
--47483647 <-- after placing 36 to the right of first two pairs

Наконец перетащите цифры одну за другой из вашей руки, начиная с самой правой цифры (в данном случае 2), и поместите их в первый пустой слот, который вы получите

2-47483647 <-- after placing 2
2147483647 <-- after placing 1

Вот оно! Для отрицательного предела вы можете думать об этом как о 1 больше в абсолютном значении , чем положительном пределе.

Попрактикуйтесь несколько раз, и вы освоите это!

21 голосов
/ 14 сентября 2012

Самый простой способ сделать это для целых чисел - это использовать шестнадцатеричное при условии, что нет ничего похожего на Int.maxInt (). Причина в следующем:

Макс. Значения без знака

8-bit 0xFF
16-bit 0xFFFF
32-bit 0xFFFFFFFF
64-bit 0xFFFFFFFFFFFFFFFF
128-bit 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Значения со знаком, используя 7F в качестве максимального значения со знаком

8-bit 0x7F
16-bit 0x7FFF
32-bit 0x7FFFFFFF
64-bit 0x7FFFFFFFFFFFFFFF

Значения со знаком, используя 80 в качестве максимального значения со знаком

8-bit 0x80
16-bit 0x8000
32-bit 0x80000000
64-bit 0x8000000000000000

Как это работает? Это очень похоже на двоичную тактику, и каждая шестнадцатеричная цифра составляет ровно 4 бита. Кроме того, многие компиляторы поддерживают hex намного лучше, чем двоичный.

F hex to binary: 1111
8 hex to binary: 1000
7 hex to binary: 0111
0 hex to binary: 0000

Таким образом, 7F равно 01111111 / 7FFF равно 0111111111111111. Кроме того, если вы используете это для «безумно высокой константы», 7F ... является безопасным гексом, но достаточно просто попробовать 7F и 80 и просто распечатайте их на экране, чтобы увидеть, какой это.

0x7FFF + 0x0001 = 0x8000, так что ваша потеря - это только одно число, поэтому использование 0x7F ... обычно не является плохим компромиссом для более надежного кода, особенно после того, как вы начнете использовать 32-битные или более

20 голосов
/ 18 сентября 2008

2GB

(есть ли минимальная длина ответов?)

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