Re: [問題] 'AND' bitwise 運算

看板Perl作者 (Cindy Wang)時間8年前 (2015/11/24 15:50), 編輯推噓4(401)
留言5則, 5人參與, 最新討論串3/3 (看更多)
※ 引述《CindyLinz (Cindy Wang)》之銘言: : ※ 引述《rkcity (喵。罐頭)》之銘言: : : 今天在寫個小tool的時候發現 : : Perl 的 & 運算好像怪怪的... : : Source: : : $value = 4294967296; : : print ($value & 0xFFFFFFFF); : : Output: : : 4294967295 : : Expect: : : 預期應該是0 : : Excute Perl Online: : : http://codepad.org/9qM322Vf : : 最後我用mod先解掉了.. : : 似乎是只要大於4294967295(0xFFFFFFFF) 就會這樣 : : 即使mask設成 0x00000000FFFFFFFF 也是一樣結果 : : 請問這有辦法解決嗎? : 你的 Perl 是 32bits 版本 (大概你的機器環境是 32bits 的?), : 所以無號整數的範圍最大是 4294967295, : 常數寫超過的時候 Perl 會讓它停在這個最大值.. : 解法... 可以找 64bits 機器環境使用 64bits 的 Perl.. ^^| : (嗯, 因為不知道你真實的需求是什麼, 如果只看這幾行的話, : 直接寫 print 0 可能是最佳解? ^^|) : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.121.78.5 : ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1448301557.A.424.html : 推 rkcity: 哈哈哈 感謝回覆 環境是32bit 11/24 09:34 : 推 rkcity: 需求是我現在需要做一個計算不同checksum的tool。其中一 11/24 09:38 : → rkcity: 種是計算所有數值的加總 但是必須放回32bit register 11/24 09:39 : → rkcity: 用C的話overflow部分會直接被吃掉 不會像perl停留在最大值 11/24 09:40 : 推 abliou: 太厲害了!! 11/24 13:22 欸~ 可以考慮局部 use bigint; 像這樣子 # 這邊是平常的計算模式 { # 這個 block 裡面使用 bigint 計算模式 use bigint; my $a = 18446744073709551616; # 2**64 (因為我的環境是 64bits 的, 所以我試這個會出界的例子) $a **= 3; # 讓它更出界一點 (? print $a,$/; # 這邊會印出 6277101735386680763835789423207666416102355444464034512896 } # 這邊恢復平常的計算模式 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.121.78.5 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1448351448.A.564.html

11/24 16:05, , 1F
Cindy是好人!!
11/24 16:05, 1F

11/24 22:21, , 2F
這招不錯,筆記一下
11/24 22:21, 2F

11/24 23:16, , 3F
感謝Cindy大
11/24 23:16, 3F

11/26 15:20, , 4F
推(Y)
11/26 15:20, 4F

04/01 22:18, , 5F
04/01 22:18, 5F
文章代碼(AID): #1ML1ROLa (Perl)
討論串 (同標題文章)
文章代碼(AID): #1ML1ROLa (Perl)