Так как Вы хотите случайный элемент, это будет также работать:
>>> import random
>>> s = set([1,2,3])
>>> random.sample(s, 1)
[2]
документация, кажется, не упоминает производительность random.sample
. От действительно быстрого эмпирического теста с огромным списком и огромным набором, это, кажется, постоянное время для списка, но не для набора. Кроме того, повторение по набору не случайно; порядок не определен, но предсказуем:
>>> list(set(range(10))) == range(10)
True
, Если бы случайность важна и Вам нужен набор элементов в постоянное время (большие наборы), я использовал бы random.sample
и преобразовал бы в список сначала:
>>> lst = list(s) # once, O(len(s))?
...
>>> e = random.sample(lst, 1)[0] # constant time
Минимальные диапазоны, на которые вы можете положиться:
short int
и int
: от -32,767 до 32,767 без знака short int
и unsigned int
: от 0 до 65 535 long int
: от -2 147 483 647 до 2 147 483 647 unsigned long int
: от 0 до 4 294 967 295 Это означает, что нет, long int
нельзя полагаться на для хранения любого 10-значного числа. Однако более крупный тип long long int
был введен в C в C99 и C ++ в C ++ 11 (этот тип также часто поддерживается как расширение компиляторами, созданными для более старых стандартов, которые его не включали). Минимальный диапазон для этого типа, если ваш компилятор поддерживает его:
long long int
: от -9,223,372,036,854,775,807 до 9,223,372,036,854,775, 807 unsigned long long int
: от 0 до 18 446 744 073 709 551 615 Так что этот тип будет достаточно большим (опять же, , если он у вас есть).
Примечание для тех, кто верит Я ошибся с этими нижними границами - нет. Требования C для диапазонов написаны так, чтобы обеспечить возможность представления целых чисел с дополнением до единиц или величиной знака, где наименьшее представимое значение и наибольшее представимое значение отличаются только знаком. Также разрешено иметь представление с дополнением до двух, где значение с битом знака 1 и всеми битами значения 0 является представлением прерывания , а не допустимым значением. Другими словами, int
- это , а не , необходимый для представления значения -32 768.
Так что этот тип будет достаточно большим (опять же, , если он у вас есть).
Примечание для тех, кто считает, что я ошибся с этими нижними границами - я не т. Требования C для диапазонов написаны так, чтобы обеспечить возможность представления целых чисел с дополнением до единиц или величиной знака, где наименьшее представимое значение и наибольшее представимое значение отличаются только знаком. Также разрешено иметь представление с дополнением до двух, где значение с битом знака 1 и всеми битами значения 0 является представлением прерывания , а не допустимым значением. Другими словами, int
- это , а не , необходимый для представления значения -32 768.
Так что этот тип будет достаточно большим (опять же, , если он у вас есть).
Примечание для тех, кто считает, что я ошибся с этими нижними границами - я не т. Требования C для диапазонов написаны так, чтобы допускать целочисленные представления с дополнением единиц или знаковой величиной, где наименьшее представимое значение и наибольшее представимое значение отличаются только знаком. Также разрешено иметь представление с дополнением до двух, где значение с битом знака 1 и всеми битами значения 0 является представлением прерывания , а не допустимым значением. Другими словами, int
- это , а не , необходимый для представления значения -32 768.
int
- это , а не , необходимый для представления значения -32 768. Я ошибся с этими нижними границами - я не сделал. Требования C для диапазонов написаны так, чтобы допускать целочисленные представления с дополнением единиц или знаковой величиной, где наименьшее представимое значение и наибольшее представимое значение отличаются только знаком. Также разрешено иметь представление с дополнением до двух, где значение с битом знака 1 и всеми битами значения 0 является представлением прерывания , а не допустимым значением. Другими словами, int
- это , а не , необходимый для представления значения -32 768. Также разрешено иметь представление с дополнением до двух, где значение с битом знака 1 и всеми битами значения 0 является представлением прерывания , а не допустимым значением. Другими словами, int
- это , а не , необходимый для представления значения -32 768. Также разрешено иметь представление с дополнением до двух, где значение с битом знака 1 и всеми битами значения 0 является представлением прерывания , а не допустимым значением. Другими словами, int
- это , а не , необходимый для представления значения -32 768. Размер числовых типов не определен в стандарте C ++, хотя минимальные размеры определены. Чтобы узнать, какой у них размер на вашей платформе, используйте числовые ограничения
Например, максимальное значение для int можно найти следующим образом:
std::numeric_limits<int>::max();
Компьютеры не работают с основанием 10, что означает что максимальное значение будет в форме 2 n -1 из-за того, как числа представляют в памяти. Возьмем, например, восемь битов (1 байт)
0100 1000
Самый правый бит (число) при установке в 1 представляет 2 0 , следующий бит 2 1 , затем 2 2 и так далее, пока не дойдем до самого левого бита, который, если число без знака представляет 2 7 .
Таким образом, число представляет 2 6 + 2 ] 3 = 64 + 8 = 72,
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 8 - 1
И, как мы видим, это максимально возможное значение, которое может быть представлено 8 битами.
На моей машине int и long одинаковы, каждый из них может удерживать от -2 31 до 2 31 - 1. По моему опыту, наиболее распространенный размер на современных 32-битный настольный компьютер.
Другие люди здесь будут публиковать ссылки на data_sizes, precision и т. Д.
Я расскажу, как разобраться самому.
Напишите небольшое приложение, которое будет делать следующее.
unsigned int ui;
std::cout << sizeof(ui));
оно будет (в зависимости от компилятора и архива) печатать 2, 4 или 8, говоря 2 байта, 4 байта и т. Д.
Предположим, что это 4.
Теперь вам нужно, чтобы максимальное значение, которое можно сохранить, составляет 4 байта, максимальное значение для одного байта (в шестнадцатеричном формате) 0xFF. Максимальное значение четырех байтов - 0x, за которым следуют 8 f (одна пара f для каждого байта, 0x сообщает компилятору, что следующая строка является шестнадцатеричным числом). Теперь измените свою программу, назначив это значение и распечатав результат
unsigned int ui = 0xFFFFFFFF;
std::cout << ui;
Это максимальное значение, которое может содержать unsigned int, показанное в представлении с основанием 10.
Теперь сделайте это для длинных, коротких и любых других значений INTEGER, которые вам интересны. о.
NB: Этот подход не будет работать для чисел с плавающей запятой (например, double или float).
Надеюсь, это поможет
Для беззнакового типа данных знаковый бит отсутствует и все биты для данных ; тогда как для подписанного типа данных MSB указывается знаковый бит, а оставшиеся биты предназначены для данных.
Чтобы найти диапазон, выполните следующие действия:
Шаг: 1 -> Определите количество байтов для данного тип данных.
Шаг: 2 -> Применить следующие вычисления.
Let n = no of bits in data type
For signed data type ::
Lower Range = -(2^(n-1))
Upper Range = (2^(n-1)) - 1)
For unsigned data type ::
Lower Range = 0
Upper Range = (2^(n)) - 1
Например,
Для размера целого числа без знака = 4 байта (32 бита) -> Диапазон [0, (2 ^ (32)) - 1 ]
Для подписанного int size = 4 байта (32 бита) -> Диапазон [- (2 ^ (32-1)), (2 ^ (32-1)) - 1]
Нет, только часть десятизначного числа может храниться в длинном int без знака, допустимый диапазон которого равен 0 на 4 294 967 295. вы можете сослаться на это: http://msdn.microsoft.com/en-us/library/s3f49ktz (VS.80) .aspx
Может беззнаковое long int содержать десятизначное число (1 000 000 000 - 9 999 999 999) на 32-битном компьютере.
Нет
Вы должны посмотреть на специализации шаблона numeric_limits <> для данного типа. Его в шапке.