首頁>Club>
10
回覆列表
  • 1 # 陽光魯寧

    二進位制補碼運算公式:

    -x = ~x + 1 = ~(x-1)

    ~x = -x-1

    -(~x) = x+1

    ~(-x) = x-1

    x+y = x - ~y - 1 = (x ¦y)+(x&y)

    x-y = x + ~y + 1 = (x ¦~y)-(~x|y)

    x^y = (x ¦y)-(x&y)

    x ¦y = (x&~y)+y

    x&y = (~x ¦y)-~x

    x==y: ~(x-y ¦y-x)

    x!=y: x-y ¦y-x

    x < y: (x-y)^((x^y)&((x-y)^x))

    x <=y: (x ¦~y)&((x^y) ¦~(y-x))

    x < y: (~x&y) ¦((~x ¦y)&(x-y))//無符號x,y比較

    x <=y: (~x ¦y)&((x^y) ¦~(y-x))//無符號x,y比較

    應用舉例

    (1) 判斷int型變數a是奇數還是偶數

    a&1 = 0 偶數

    a&1 = 1 奇數

    (2) 取int型變數a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1

    (3) 將int型變數a的第k位清0,即a=a&~(1 < <k)

    (4) 將int型變數a的第k位置1, 即a=a ¦(1 < <k)

    (5) int型變數迴圈左移k次,即a=a < <k ¦a>>16-k (設sizeof(int)=16)

    (6) int型變數a迴圈右移k次,即a=a>>k ¦a < <16-k (設sizeof(int)=16)

    (7)整數的平均值

    對於兩個整數x,y,如果用 (x+y)/2 求平均值,會產生溢位,因為 x+y 可能會大於INT_MAX,但是我們知道它們的平均值是肯定不會溢位的,我們用如下演算法:

    int average(int x

  • 中秋節和大豐收的關聯?
  • 金朝鑄造的“大定通寶”,錢幣材質有幾類?版別有哪些?