看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Venividivici (不想後悔)》之銘言: : 請問一下 C 或 C++ 有類似等價於 Java ">>>" 及 "<<<" 的用法嗎? : 查了一下網路上的資訊是說 >>> 與 >> 的差別在於如果最左邊是 1, >>> 會保留 : 最左邊的 1 , 而 >> 則是直接補 0; : 所以如果在 Java 中的寫法是 a = -1; b = a >>> 1; : 在 C++ 中的寫法會等價於 a = -1; b = ( a >> 1 ) & ( 1000 0000 0000 0000 ); : 不知道這樣是正確的嗎? 應該說, Java 的這兩個符號規則是這樣 假設 a 是 11010101b 那麼 a >> 1 是 10101010b 其中最前面的 1 不變, 後面的位數往右移一位, 最左邊補零 而 a >>> 1 則是 01101010b 就是全部往右移, 最左邊補零 另一方面, C/C++ 的位元運算則是沒有在分正負, 都是對全部位元直接運算 所以 C/C++ 的 >> 和 Java 的 >>> 是等價的, 而沒有和 >> 等價的運算子 事實上其實不建議在 C/C++ 對有號整數進行位元運算, 因為可能溢位造成未定義行為 因為 C/C++ 標準並沒有定義負整數的表示法, 可能不是二的補數 在例如 01111111 << 1 的狀況, 出來的結果 (11111110) 代表多少其實不一定 而在無號整數的狀況下, Java 的 >> 和 >>> 行為也一模一樣 << 和 <<< 就一樣了, 自己類推 -- Les grandes et les meilleurs tone from "Zadok the Priest" Eine grosse stattliche Veranstaltung by F. Handel THE MAIN EVENT! These are the men Sie sind die Besten "Champions League" by Tony Britten THESE ARE THE CHAMPIONS! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146
LPH66:不是不變啦....是移了之後最高位留 1 01/10 01:28
LPH66:所以第一個例子是 11101010b 才對 01/10 01:28
uranusjr:是喔, 我跟 Java 太不熟了, 憑印象亂寫 orz 01/10 01:34
loveme00835:= __ = 我連有這東西都不知道 01/10 01:36
tkcn:java >> 是移完之後最高位不變。(正數為0, 負數為1) 01/10 10:21
stupid0319:真是太神奇了,傑克 01/10 10:28