日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

神奇的x -x,Lowbit函数的实现方式!

發(fā)布時間:2023/12/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 神奇的x -x,Lowbit函数的实现方式! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • -x
  • x & -x,當x為偶數(shù)時
  • x & -x,當x為奇數(shù)時
  • x&-x 的實際用途


-x

-x 在二進制里表示對 x 的二進制按位取反(~x)之后再加 1 ,即

-x = ~x+1

x & -x,當x為偶數(shù)時

在執(zhí)行 x & -x 時,若 x 為偶數(shù),最后結果肯定有如下兩個特征:

  • 這個結果只有一位值是1, 其他位均是0
  • 這個值的末位0的個數(shù)與原值保持一致
  • 從數(shù)學上推導,因為 偶數(shù) 的二進制末尾一定由 k 個 0 構成,如:110(6) 100(4)。
    那么對其按位取反一定得到 k 個 1 ,當再對 ~x 進行 加一 操作后,一定能得到 1個1 和 k個0 ,而在 1 前面的數(shù)已經(jīng)全部 按位取反 ,唯有 1 后面的數(shù)經(jīng)過 取反->加一進位(形同再次取反) ,變回了原來的數(shù),但我們知道,1 后面原本就是 k個0 ,因此, 證得上述兩個特征。

    用幾個實例來證明:

    x = 4 x:100 ~x: 011 -x=~x+1: 100 x & -x: 100x = 6 x: 110 ~x: 001 -x: 010 x & -x: 010x = 10 x: 1010 ~x: 0101 -x: 0110 x & -x: 0010

    而這個結果有什么用呢?實際上這個結果是能整除這個偶數(shù)的最大的2的冪, 即:
    m = n & -n ,則 n % m = 0 , 且 m = 2 ^ k 。


    x & -x,當x為奇數(shù)時

    x 為奇數(shù)時就比較簡單了, 因為奇數(shù)取反后的值一定是偶數(shù), 也就是有 k個0 。對其進行 加一 操作也就是變成了 k-1個0 和 1個1 ,形如:00…001(k-1個0),不會發(fā)生進位,因此只有最后一位變成了原本的數(shù),也就是 1 ,因此 x&-x 值為 1 。

    用幾個實例來證明:

    x = 3 x:11 ~x: 00 -x=~x+1: 01 x & -x: 01x = 5 x: 101 ~x: 010 -x: 011 x & -x: 001x = 11 x: 1011 ~x: 0100 -x: 0101 x & -x: 0001

    x&-x 的實際用途

    實際上如果用過 Lowbit函數(shù) ,那么此時已經(jīng)會恍然大悟了,沒錯, x & -x 正是 Lowbit函數(shù) 的一種實現(xiàn)方式。

    這里簡單說一下什么是 Lowbit函數(shù) ?Lowbit函數(shù)用來返回參數(shù)轉為二進制后,最后一個1的位置所代表的數(shù)值。例如,Lowbit(34)的返回值將是2;而Lowbit(12)返回4;Lowbit(8)返回8;參數(shù)為任何奇數(shù)時返回1。

    總結

    以上是生活随笔為你收集整理的神奇的x -x,Lowbit函数的实现方式!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。