PHP/bindec

من موسوعة حسوب
< PHP
مراجعة 18:07، 18 مارس 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (إضافة محتويات الصفحة.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

(PHP 4, PHP 5, PHP 7)

تحوِّل الدالة bindec()‎ العدد الثنائي الممرَّر إليها إلى عدد عشري.

الوصف

number bindec ( string $binary_string )

تعيد هذه الدالة عددًا عشريًّا مقابلًا للعدد الثنائي binary_string الممرَّر إليها. تحوِّل الدالة العدد الثنائي إلى عدد صحيح (integer) أو إلى عدد عشري (float) عند احتياج حجم أكبر.

تعامل الدالة bindec()‎ جميع القيم العدديَّة التي تحولها على أنَّها أعداد عديمة الإشارة (unsigned) إذ لا تأخذ بالحسبان أنَّ البت الأكثر أهمية (MSB)، الواقع على يسار العدد الثنائي binary_string، مخصَّص للإشارة بل يدخل في حساب قيمة العدد الثنائي ليَنتج عدد صحيح عديم الإشارة.

المعاملات

binary_string

السلسلة النصية التي تحتوي على العدد بالنظام الثنائي المطلوب تحويله.

تحذير: يجب أن يكون نوع المعامل الممرَّر سلسلةً نصيَّةً (string)، وسيؤدي استعمال نوع آخر إلى الحصول على نتائج غير متوقعة.

القيم المعادة

تُعاد القيمة العدديَّة الصحيحة (عدد صحيح أو عشري) المقابلة للعدد الثنائي binary_string.

أمثلة

المثال 1: استعمال الدالة bindec()‎

<?php
echo bindec('110011') . "\n";
echo bindec('000110011') . "\n";

echo bindec('111');
?>

سيُظهر المثال السابق النتيجة التالية:

51
51
7

المثال 2: تفسير الدالة bindec()‎ المدخلات على أنَّها أعداد صحيحة عديمة الإشارة

<?php
/*
 * فائدة هذا المثال هي في المخرجات
 * أكثر منها في الشيفرة المكتوبة
 */

$magnitude_lower = pow(2, (PHP_INT_SIZE * 8) - 2);
p($magnitude_lower - 1);
p($magnitude_lower, 'See the rollover?  Watch it next time around...');

p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'interpreted to be one more than PHP_INT_MAX');

if (PHP_INT_SIZE == 4) {
    $note = 'interpreted to be the largest unsigned integer';
} else {
    $note = 'interpreted to be the largest unsigned integer
              (18446744073709551615) but skewed by float precision';
}
p(-1, $note);


function p($input, $note = '') {
    echo "input:        $input\n";

    $format = '%0' . (PHP_INT_SIZE * 8) . 'b';
    $bin = sprintf($format, $input);
    echo "binary:       $bin\n";

    ini_set('precision', 20);  //من أجل تسهيل القراءة على أنظمة 64 بت
    $dec = bindec($bin);
    echo 'bindec():     ' . $dec . "\n";

    if ($note) {
        echo "NOTE:         $note\n";
    }

    echo "\n";
}
?>

سيُظهر المثال السابق المخرجات التالية على أنظمة 32 بت:

input:        1073741823
binary:       00111111111111111111111111111111
bindec():     1073741823

input:        1073741824
binary:       01000000000000000000000000000000
bindec():     1073741824
NOTE:         See the rollover?  Watch it next time around...

input:        2147483647
binary:       01111111111111111111111111111111
bindec():     2147483647
NOTE:         PHP_INT_MAX

input:        -2147483648
binary:       10000000000000000000000000000000
bindec():     2147483648
NOTE:         interpreted to be one more than PHP_INT_MAX

input:        -1
binary:       11111111111111111111111111111111
bindec():     4294967295
NOTE:         interpreted to be the largest unsigned integer

بينما سيُظهر النتائج التالية على أنظمة 64 بت:

input:        4611686018427387903
binary:       0011111111111111111111111111111111111111111111111111111111111111
bindec():     4611686018427387903

input:        4611686018427387904
binary:       0100000000000000000000000000000000000000000000000000000000000000
bindec():     4611686018427387904
NOTE:         See the rollover?  Watch it next time around...

input:        9223372036854775807
binary:       0111111111111111111111111111111111111111111111111111111111111111
bindec():     9223372036854775807
NOTE:         PHP_INT_MAX

input:        -9223372036854775808
binary:       1000000000000000000000000000000000000000000000000000000000000000
bindec():     9223372036854775808
NOTE:         interpreted to be one more than PHP_INT_MAX

input:        -1
binary:       1111111111111111111111111111111111111111111111111111111111111111
bindec():     18446744073709551616
NOTE:         interpreted to be the largest unsigned integer
              (18446744073709551615) but skewed by float precision

ملاحظات

  • تستطيع الدالة تحويل أعداد كبيرة جدًا، ويكون نوع العدد المُعاد صحيحًا (integer) بما يتلائم مع النظام المستعمل (أي حجم العدد الصحيح في ذلك النظام)؛ إن كان حجم العدد كبيرًا ولا يتناسب مع حجم العدد الصحيح فستعيد الدالة حينئذٍ عددًا عشريًّا (float).

انظر أيضًا

  • الدالة decbin()‎: تحوِّل العدد الصحيح أو العشري إلى عدد ثنائي.
  • الدالة octdec()‎: تحوِّل العدد الثمائي إلى عدد صحيح.
  • الدالة hexdec()‎: تحوِّل العدد الست عشري إلى عدد صحيح.
  • الدالة base_convert()‎: تحوِّل العدد ذو أساس ما إلى أساس آخر معيَّن.

مصادر