2008年03月29日

卒業

先日東京大学理学部情報科学科を卒業しました。

理学部学修奨励賞なるものも頂いて、ほんと有り難い限りです。

引き続き、東京大学大学院情報理工学系研究科コンピューター科学専攻に進学します(名前長杉)。

駒場時代は無事に卒業出来るとは思ってなかったので、良かった良かった。

不真面目な僕を助けてくれた同期の皆様、ありがとう(ぺこり

2008年03月26日

PHP higixi

んー、PHPの数字表現ぜんぜん知らんけど是は良いのだろうか。

pficore% cat hoge.php
<?php
$m  = 0xf0000000;
$v1 = 0x80000000;
$v2 = 0x80000000;
echo ($v1 & $m) . "\n";
echo ($v2) . "\n";
?>

PHP 5.2.3 on i686

[kzk@pfi php]# php -v
PHP 5.2.3 (cli) (built: Jun 18 2007 19:07:30)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
[kzk@pfi php]# php hoge.php
-2147483648
2147483648

PHP 5.2.1 on x86_64

pficore% php -v
PHP 5.2.1 (cli) (built: Nov 28 2007 23:22:01)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
pficore% php hoge.php
2147483648
2147483648

ええぇ

整数のサイズはプラットフォームに依存しますが、 約 20 億 (32 ビット符号付) が一般的な値です。 PHP は符号無し整数をサポートしていません。 整数のサイズは PHP_INT_SIZE で決まります。

まじで。PHP_INT_SIZEは上の環境が4, 下の環境が8でした。INTのサイズが違うっていう発想が無かったわ。PHP初心者丸出し。

32bit環境で符号無し32bit値について安全に&演算を行える方法を誰か教えて下さい!そもそもPHPでするなという話は有るが・・・。

2008年03月16日

PHP higixi

誰かこのPHPの挙動を説明してください・・・。ThriftのPHPライブラリが動かなかったので見つけた。

サンプルコード

pficore% cat hoge.php
<?php
$v1 = 132;
$d = pack("N", $v1);
$v2 = unpack("N", $d);
print_r($v2);

$unpacked = unpack('nhigh/nlow', $d);
$v2 = ($unpacked['high'] << 16) + $unpacked['low'];
print_r($v2)
?>

PHP v5.2.1

pficore% php --version
PHP 5.2.1 (cli) (built: Nov 28 2007 23:22:01)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
pficore% php hoge.php
Array
(
    [1] => -2147483516
)
132

PHP v4.3.9

[web at pfiweb1 ~]$ php --version
PHP 4.3.9 (cgi) (built: May 10 2007 05:09:26)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
[web at pfiweb1 ~]$ php hoge.php
Array
(
    [1] => 132
)
132