Максимальный размер INT для 32-битной системы - PullRequest
1 голос
/ 07 января 2012

Допустим, речь идет о 32-битной системе.

PHP не поддерживает неподписанные INT. Это означает, что значение INT должно быть между -2 147 483 648 и 2 147 483 647 значениями. И INT занимает 4 байта для хранения значения длиной 32 бита.

Значит ли это, что у меня есть только 31 бит для значения и 1 бит для знака? Или я могу использовать целые 32 бита для хранения значения?

Ответы [ 7 ]

4 голосов
/ 07 января 2012

Вы , используя целые 32 бита.Просто выходные функции по умолчанию интерпретируют как целое число со знаком.Если вы хотите отобразить значение «raw», используйте:

printf("%u", -1);    //  %u for unsigned

Так как PHP обрабатывает целые числа, подписанные внутри, однако, вы можете использовать только битовую арифметику, но не сложение / умножение и т. Д. С ними - если вы ожидаетевести себя как неподписанные целые.

1 голос
/ 07 января 2012

Насколько мне известно, в 32-битной системе наибольшее возможное положительное целое число - 2147483647. Приведенные выше значения будут значениями с плавающей запятой, поскольку значение с плавающей запятой в php может принимать значения до 10000000000000.

1 голос
/ 07 января 2012

Прежде всего, если вы хотите выполнять вычисления с огромными числами (скажем, с регулярностью больше 10 КБ), вы должны использовать модуль bcmath с произвольной точностью.

Во-вторых, официальная реализация php использует внутреннее дополнение Two для представления чисел, как и практически все другие компиляторы и интерпретаторы. Поскольку энтропия подписанного бита (если считать 0 как положительное [1] ) равно 1, а энтропия 31 бита, ну, 31, вы можете сохранить 2 32 = 4 294 967 296 различных значений. Как вы интерпретируете их, зависит от вашего заявления.


[1] - 0 не является ни положительным, ни отрицательным.

0 голосов
/ 07 января 2012

Да, если бы он использовал целое число без знака, он будет использовать 32-битное для его хранения, так как в этом случае вам не нужен знак, но поскольку он поддерживает только целые числа со знаком, 32-битные системы будут иметь 31-битное значение и 1-битное знак s0 - максимальный диапазон целых чисел со знаком от -2147483648 до 2147483647.

0 голосов
/ 07 января 2012

2147483647 - обычное значение 2 ^ 31-1.1 бит для знака и -1, потому что мы также представляем 0.

из руководства: «Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита64-разрядные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает целые числа без знака. Размер целого можно определить с помощью константы PHP_INT_SIZE, а максимальное значение - с помощью константы PHP_INT_MAX, начиная с PHP 4.4.0 и PHP 5.0.5.. "

0 голосов
/ 07 января 2012

Дополнение Two чаще всего используется для хранения чисел, что означает, что 1 бит не тратится впустую только на знак.

http://en.wikipedia.org/wiki/Two's_complement

В PHP, если число переполняется INT_MAX дляплатформа, она преобразует его в значение с плавающей запятой.

0 голосов
/ 07 января 2012

Обычно с 32-разрядными целыми числами разница между знаком и без знака заключается только в том, как вы интерпретируете значение.Например, (-1) +1 будет равно 1 как для подписанного, так и для неподписанного, для подписанного это очевидно, а для неподписанного это, конечно, верно, если вы просто отключите переполнение.Таким образом, у вас есть 32 бита для хранения значений, просто так получается, что 1 бит интерпретируется иначе, чем остальные.

...