Проблема больших чисел

Проблема больших чисел

сдеал такую хрень. но больше чем с примерно 20 единицами не работает
PHP:
<?php
$base='1101111111111111110111011111111111111101';

//получаем десятичное число для хранения в базе
$base=base_convert($base,2,10);

//смотрим соответствия опциям
for($i=0;$i<40;$i++){
         if ($base&pow(2,$i)) echo 'есть<br>';
         else echo 'нету<br>';
        }

?>
че можно придумать без разбития строки на части?
 

Marduk

Новичок
рассмотреть $base как строку не подходит?

if($base[$i]) -> есть
 
Marduk конечно, можно сделать так
PHP:
<?php
$base='1101111111111111110111011111111111111101';

//получаем десятичное число для хранения в базе
$base=base_convert($base,2,10);
$base=base_convert($base,10,2);

//смотрим соответствия опциям
for($i=0;$i<strlen($base);$i++){
         if ($base[$i]==1) echo 'есть<br>';
         else echo 'нету<br>';
        }

?>
но вся задумка примера потеряется.
 
Popoff
Мне кажется, что такой вариант более удобный, быстрый и интересный. Здесь и смещение сразу реаизовано и добавление байта в нужную часть и хранение в базе.
 
Андрейка
а потому что число такое большое не воспринимается правильно
PHP:
$base='1101111111111111110111011111111111111101'; 

//получаем десятичное число для хранения в базе 
$base=base_convert($base,2,10); 
$base=base_convert($base,10,2); 
echo $base;
//и
$base=1101111111111111110111011111111111111101; 

//получаем десятичное число для хранения в базе 
$base=base_convert($base,2,10); 
$base=base_convert($base,10,2); 
echo $base;
 

Андрейка

Senior pomidor developer
Ты base_convert забудь, base_convert отработал свое.

но больше чем с примерно 20 единицами не работает
не с 20, а дето около 31... просто ты неправильно себе представляешь 32битное целое.. оно не бывает двоичным или десятиричным-десятичным, в отличие от его представления.. представление тебе нафик не надо, тебе нужны байты... если тебе 30 значений-байт хватит, то я не пойму этих лишних телодвижений по переводу числа в строку .. если не хватит - или обломс или в мануал-справочник языка-целые числа - сверху ремарка
 
даже если обойти первую проблему, что я и сделал переводом числа в строку, - возникает проблема
$base&pow(2,40)
тоже, походу дела, расчитано до 31.
 

Андрейка

Senior pomidor developer
В поисках вечно
все целые числа 32 битные ) и больше, чем 32 бита использовать не получицца )

-~{}~ 19.10.06 21:02:

bgm
пример использования, плиз
 

Popoff

popoff.donetsk.ua
Мне кажется, что такой вариант более удобный, быстрый и интересный. Здесь и смещение сразу реаизовано и добавление байта в нужную часть и хранение в базе.
1. Удобство. Вы утверждаете, что это выражение:
$base&pow(2,$i)
удобнее, чем это:
$base[$i]
?
Может быть, может быть...

2. Скорость. Вы проводили какие-то тесты? Можно ознакомиться с результатами?

Вы действительно думаете, что доступ к i-му символу строки - это дольше, чем конвертирование всей этой строки из двоичной формы в десятичную плюс функция вычисления степени?

3. Интересность. Ваш способ может быть интересен тогда и только тогда, когда в других способах Вы не разобрались и не хотите разбираться одновременно.

4. "Здесь и смещение сразу реаизовано" - а при работе со строками? Нет смещения? Чего, по-вашему, нельзя сделать со строками такого, что можно сделать Вашими операциями с числами?

5. "добавление байта в нужную часть". То есть, Вы утверждаете, что при работе со строками нельзя установить нужный символ в нужное значение? Это подтверждает мою догадку из п.3.

6. "хранение в базе". Ага. То есть, строки в базе данных хранить нельзя. Только числа. Приму к сведению. Надо будет написать в АВ MySQL письмо, чтобы они удалили из мануала всю информацию, касающуюся хранения и работы со строками, так как она там лишняя, потому что никаких строк в базах данных быть не может.
 
Popoff
Скорость. Вы проводили какие-то тесты? Можно ознакомиться с результатами?
PHP:
$time_start = getmicrotime();  
//операции
$time_end = getmicrotime();
$time = $time_end - $time_start;
print $time;
Тестируйте, у меня на это нет времени. Я и так знаю, что числа считаются быстрее чем строки.
Вы действительно думаете, что доступ к i-му символу строки - это дольше, чем конвертирование всей этой строки из двоичной формы в десятичную плюс функция вычисления степени?
конвертирований никаких нет. всё хранится в десятичном виде.
Здесь и смещение сразу реаизовано" - а при работе со строками? Нет смещения? Чего, по-вашему, нельзя сделать со строками такого, что можно сделать Вашими операциями с числами?
я делаю так 12^2 - а теперь пример для сравнения, как это делается со строками.
То есть, строки в базе данных хранить нельзя. Только числа.
опять же скорость и объём.
В общем, мой вариант просто более быстрый и сложный в понимании. Строковой - простой и медленный.
 
Сверху