我想什麼:如何使用Ruby的按位運算符來計算補碼?
assert_equal 6, ones_complement(9) # 1001 => 0110
assert_equal 0, ones_complement(15) # 1111 => 0000
assert_equal 2, ones_complement(1) # 01 => 10
輸入的大小是不固定的,如4位或8位。而是它的一個二進制流。
我看到:
v = "1001".to_i(2) => 9
有一個位翻轉操作~
(~v).to_s(2) => "-1010"
sprintf("%b", ~v) => "..10110"
~v => -10
我認爲它得到的東西與一位做用來存儲符號或東西...能有人解釋這個輸出?如何獲得補碼而不訴諸字符串操作,如從sprintf輸出中刪除最後n個字符以獲得「0110」或用1代替0,反之亦然
P.S.我不使用Ruby,但是在Python中,9^15返回6(即1001 xor 1111是0110)。 – Cascabel 2009-07-29 17:14:45
Ruby中的9^15 => 6也是如此。謝謝..我的腦細胞似乎已經稱它爲一天。需要睡覺..我想。 – Gishu 2009-07-29 18:07:20
1^0b1111 == 1,而不是2.您如何決定使用多少個前導零?實際上, – AShelly 2009-07-29 19:01:53