note 68674 deleted from function.sprintf by googleguy

From: Date: Tue, 22 Oct 2013 14:58:56 +0000
Subject: note 68674 deleted from function.sprintf by googleguy
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-197266@lists.php.net to get a copy of this message
Note Submitter: Ulf Wostner ---- <?php #----------------------------------------------------- # Viewing Two's Complement using sprintf formatting. #----------------------------------------------------- # Systems using Two's Complements have exactly one number that equals its own Two's Complement. # On a 32-bit system look at 1000 0000 0000 0000 for -2147483648 # Take the one's complement, to get 0111 1111 1111 1111, add 1 # to get the Two's Complement: 1000 0000 0000 0000 # We are back to the original number, the so-called Weird Number for 32-bits. # For a 64-bit system, format that number as binary, width 64, padded with 0's. printf("%064b\n", -2147483648); # Output with added spaces: # 11111111 11111111 11111111 11111111 10000000 00000000 00000000 00000000 # And here is the Two's Complement on a 64-bit system. printf("%064b\n", +2147483648); # Output with added spaces: # 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 # They share those last 32 bits, accounting for the 32-bit Weird Number. #---------------------------------------------------------- # Is PHP running 32-bit or 64-bit? #---------------------------------------------------------- # Sure, we can look at the max int, but The Weird Number also tells if we are in 32-bit, 64-bit, or ... function getBitCount() { $how_many_bits = 1; $n = 2; while(True) { $how_many_bits += 1; $n *= 2; # powers of 2 # matches its own two's complement? if( sprintf("%b", $n) == sprintf("%b", -$n) ) return 1 + $how_many_bits; } return; } ?>

« previous php.notes (#197266) next »