我試圖撰寫一個 Perl 程式,它將兩個表示二進制數的字串(即僅由字符“1”和“0”組成)作為輸入并列印出將這兩個數字按位或運算的結果(列印結果也是二進制的)。
在這樣做的程序中,我創建了以下程式,它正是這樣做的,但我很難理解它為什么起作用:
my $a = "1000100101101";
my $b = "0100111000101";
print($a | $b); # prints "1100111101101"
我知道 perl 在類似數字的背景關系中使用時會自動將字串轉換為數字,但它總是將此類字串轉換為以 10 為基數的數字。
為什么這個程式似乎對兩個二進制數字字串執行按位或?
uj5u.com熱心網友回復:
使用該bitwise
功能時,
|
取兩個數字并找到它們的按位或。(字串被數字化。)|.
接受兩個字串并找到字串的每個相同索引字符的按位或。(數字是字串化的。)
如果沒有這個特性,Perl 會根據運算元的型別bitwise
來猜測上面的哪一項。|
您顯然沒有使用該bitwise
功能。通過提供兩個字串,您最終對字串的每個相同索引字符執行 OR。
|
并且&
適用于二進制(如果字串的長度相同),但不是^
.
uj5u.com熱心網友回復:
“0”和“1”的 ASCII 碼分別是數字 48 和 49。它們的二進制表示是 0011_0000 和 0011_0001,它們恰好是 OR。可能是巧合,甚至可能是 ASCII 委員會這樣設計的。不知道。
如果您將大寫字母“A”和一個空格 0100_0001 和 0010_0000 進行或運算,則結果為 0110_0001,即小寫“a”,正如預期的那樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/468184.html
標籤:perl