[請益] PHP中運算<< 本機和server不一樣結果

看板PHP作者 (桑原)時間12年前 (2013/12/02 11:07), 編輯推噓0(0013)
留言13則, 4人參與, 最新討論串1/1
小弟遇到了一個狀況 比如 本機 echo (187604192 << 5); 跑出1708366848 server echo (187604192 << 5); 跑出6003334144 請問為什麼會有這樣的狀況發生 到底哪邊是對的? 又該怎麼讓他一致呢!? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.195.130

12/02 11:17, , 1F
檢查php版本和運行平台是否一致. 6003334144 才是對的,
12/02 11:17, 1F

12/02 11:18, , 2F
1708366848是前者除以2147483648的餘數, 顯然有溢位發生.
12/02 11:18, 2F

12/02 11:19, , 3F
要操作大數可以用 BC Math 或 GMP, PHP都有內建
12/02 11:19, 3F

12/02 12:10, , 4F
32-bit V 64-bit的差別嗎
12/02 12:10, 4F

12/02 14:05, , 5F
PHP 的整數長度會受32/64bits系統影響影響,請先確認環境
12/02 14:05, 5F

12/02 14:38, , 6F
本機是32bit的PHP吧 用BC Math吧
12/02 14:38, 6F

12/02 14:38, , 7F
不過要說前後哪個對 以數學來說後者對
12/02 14:38, 7F

12/02 14:38, , 8F
不過要看狀況 有些運算就是要剛好32bit 多的去掉
12/02 14:38, 8F

12/02 14:39, , 9F
你也沒說你這是用來做啥的
12/02 14:39, 9F

12/02 14:40, , 10F
總之你沒搞清楚這是要算啥用的 無法告訴你誰正確
12/02 14:40, 10F

12/02 14:41, , 11F
不過可以告訴你 << 這是位元運算裡的左移
12/02 14:41, 11F

12/02 14:42, , 12F
而<<就是左移五位 把數字轉成二進位應該能理解
12/02 14:42, 12F

12/02 14:42, , 13F
<<5
12/02 14:42, 13F
文章代碼(AID): #1Ic_cD6d (PHP)
文章代碼(AID): #1Ic_cD6d (PHP)