<?php
/*
* Bu örneğin asıl dersi, PHP kodunun kendisinde değil,
* çıktısındadır.
*/
$buyukluk_alt = pow(2, (PHP_INT_SIZE * 8) - 2);
p($buyukluk_alt - 1);
p($buyukluk_alt, 'Taşmayı görüyor musunuz? Bir sonraki turda da izleyin...');
p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'PHP_INT_MAX değerinden bir fazlası olarak yorumlanır');
if (PHP_INT_SIZE == 4) {
$not = 'en büyük işaretsiz tamsayı olarak yorumlanır';
} else {
$not = 'en büyük işaretsiz tamsayı olarak yorumlanır
(18446744073709551615) ancak float hassasiyeti tarafından çarpıtılır';
}
p(-1, $not);
function p($girdi, $not = '') {
echo "girdi: $girdi\n";
$bicim = '%0' . (PHP_INT_SIZE * 8) . 'b';
$ikilik = sprintf($bicim, $girdi);
echo "ikilik: $ikilik\n";
ini_set('precision', 20); // 64 bit makinelerde okunabilirlik için.
$onluk = bindec($ikilik);
echo 'bindec(): ' . $onluk . "\n";
if ($not) {
echo "NOT: $not\n";
}
echo "\n";
}
?>
Yukarıdaki örneğin 32 bitlik makinelerdeki çıktısı:
girdi: 1073741823
ikilik: 00111111111111111111111111111111
bindec(): 1073741823
girdi: 1073741824
ikilik: 01000000000000000000000000000000
bindec(): 1073741824
NOT: Taşmayı görüyor musunuz? Bir sonraki turda da izleyin...
girdi: 2147483647
ikilik: 01111111111111111111111111111111
bindec(): 2147483647
NOT: PHP_INT_MAX
girdi: -2147483648
ikilik: 10000000000000000000000000000000
bindec(): 2147483648
NOT: PHP_INT_MAX değerinden bir fazlası olarak yorumlanır
girdi: -1
ikilik: 11111111111111111111111111111111
bindec(): 4294967295
NOT: en büyük işaretsiz tamsayı olarak yorumlanır
Yukarıdaki örneğin 64 bitlik makinelerdeki çıktısı:
girdi: 4611686018427387903
ikilik: 0011111111111111111111111111111111111111111111111111111111111111
bindec(): 4611686018427387903
girdi: 4611686018427387904
ikilik: 0100000000000000000000000000000000000000000000000000000000000000
bindec(): 4611686018427387904
NOT: Taşmayı görüyor musunuz? Bir sonraki turda da izleyin...
girdi: 9223372036854775807
ikilik: 0111111111111111111111111111111111111111111111111111111111111111
bindec(): 9223372036854775807
NOT: PHP_INT_MAX
girdi: -9223372036854775808
ikilik: 1000000000000000000000000000000000000000000000000000000000000000
bindec(): 9223372036854775808
NOT: PHP_INT_MAX değerinden bir fazlası olarak yorumlanır
girdi: -1
ikilik: 1111111111111111111111111111111111111111111111111111111111111111
bindec(): 18446744073709551616
NOT: en büyük işaretsiz tamsayı olarak yorumlanır
(18446744073709551615) ancak float hassasiyeti tarafından çarpıtılır