第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

位運(yùn)算如何拆分

位運(yùn)算如何拆分

PHP
繁星coding 2019-03-11 17:14:25
舉例,比如說下面可以組合成7 1|2|4; // 7 那么比如我給一個15,怎么拆分成:1、2、4、8,或者是任意其他數(shù),怎么進(jìn)行拆分
查看完整描述

7 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊

不熟悉php。可以先確定這個數(shù)占多少位,比如64或者32等。然后再左移位,按位與來解決。寫了個python的。xrange的意思是從64開始遞減到0,每次遞減1.
這里假定是64位,符號位就不考慮了。

dest_num = 11
for i in xrange(64, -1, -1):
    n = 1 << i
    r = n & dest_num
    if r != 0:
        print r

應(yīng)該很容易改造成php的。

查看完整回答
反對 回復(fù) 2019-03-18
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個贊

用移位來做應(yīng)該會好一些,把有效位抽出來

查看完整回答
反對 回復(fù) 2019-03-18
?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個贊

其實(shí)你要就是一個數(shù)字的二進(jìn)制表示
比如
15實(shí)際上是1111, 最右邊1是12^0=1, 從右向左第二個是12^1=2, 第三個是12^2=4, 第四個是12^3=8

22用二進(jìn)制是10110, 02^0+12^1+12^2+02^3+1*2^4 = 0+2+4+0+16 = 22

整數(shù)到二進(jìn)制的做法是用除二法
22/2 = 11 ..... 0
11/2 = 5 ..... 1
5/2 = 2 ..... 1
2/2 = 1 ..... 0
1/2 = 0 ..... 1
一直除到為0, 余數(shù)10110就是它的二進(jìn)制數(shù)

查看完整回答
反對 回復(fù) 2019-03-18
?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個贊

可以使用decbin方法 參考手冊

首先得出二進(jìn)制數(shù),然后字符串操作依次讀取
如 decbin(7) => 111
從右開始算,依次得出:
第一位可以得出2^(1-1)=1
第二位可以得出2^(2-1)=2
第三位可以得出2^(3-1)=4

同理:
decbin(15) => 1111 => 1|2|4|8
decbin(13) => 1101 => 1|4|8

查看完整回答
反對 回復(fù) 2019-03-18
?
開滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個贊

15 的二進(jìn)制是:1111
1 的二進(jìn)制是:0001
2 的二進(jìn)制是:0010
4 的二進(jìn)制是:0100
8 的二進(jìn)制是:1000

看懂了嗎?
運(yùn)算就是把對應(yīng)位置的1組合到一起。

查看完整回答
反對 回復(fù) 2019-03-18
?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個贊

Javascript版的算法:

function split(n) {
  n = n|0; // 將浮點(diǎn)數(shù)n轉(zhuǎn)化為正整數(shù)
  let pad = 0;
  const arr = []; // 用于保存結(jié)果的數(shù)組
  while(n) {
    if (n&1) arr.push(1<<pad);
    pad++;
    n >>= 1;
  }
  return arr;
}

對應(yīng)的 PHP 版本:

function split($n) {
    $n |= 0;
    $pad = 0;
    $arr = array();
    while ($n) {
        if ($n & 1) array_push($arr, 1 << $pad);
        $pad++;
        $n >>= 1;
    }
    return $arr;
}
查看完整回答
反對 回復(fù) 2019-03-18
?
30秒到達(dá)戰(zhàn)場

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個贊

def decrypt(n):
    arr = []
    i = 0
    while n > 0:
        x = n % 2
        n >>= 1
        if x == 1:
            arr.append(i)
        i += 1
    return arr
查看完整回答
反對 回復(fù) 2019-03-18
  • 7 回答
  • 0 關(guān)注
  • 657 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號