function rev($n)
{
$num=intval(strlen(decbin($n))/8); //整除 8
if($num==0)
$bitLen=8;//最小8位
else
{
if((strlen(decbin($n)) % 8)>0)
$bitLen=($num+1)*8;
else
$bitLen=$num*8;
}
echo “原始值二进制:”.str_pad(decbin($n),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;
$xxoo = 0;
for ($i = 0; $i < $bitLen; $i++) {
$xxoo = $xxoo << 1;
if (($n & 1) == 1) {
$xxoo++;
}
$n = $n >> 1;
}
echo “反转后值二进制:”.str_pad(decbin($xxoo),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;
return $xxoo;
}
echo rev(4);
echo rev(43261596);
訪談題之:顛倒二進位位元的實作思維講解(PHP通用版)
這是一個面試題,有學員表示不能理解。簡單給大家訓練下,並不是很難,但是要寫完善比較考驗基礎功底,也需要有些邏輯思維能力,由於學員的方向是PHP,那麼就用PHP來講解下,同時也是告訴大家學PHP並不是說只要會寫兩句echo “hello world”,或是循環輸出到網頁就叫會PHP了。
有幾個知識惡補下: (推薦學習:PHP影片教學)
1 、一個數字佔一個字節,也就是8位
打個比方,十進制數字1 ,在計算機利用二進位表示 是 00000001 (如果十進制轉二進制都忘了,請自行百度,這個忘了下面你看不懂~~~)
PHP中可以用
echo bindec("00000001"); //bindec函数可以让你体会到 二进制和10进制之间的 骚转换<br/>
2、十進制數字相加 1 1 =2 (這個提示很重要哦~~,仔細體會)
用二進位用位移來搞定
#答案: 00000010 這廝剛好就是2 (2的1次方)
那麼十進制2 1=3 呢?
答案:00000011 這廝剛好就是3 (2的1次方2的0次方=2 1=3)
那麼十進制3 1=4 呢?
答案:00000100 這廝是4 (2的2次方)
那麼十進位 4 1=5 呢?
答案:00000101 這廝是4 (2的2次方2的0次方=4 1=5)
#開始解題
假設有二進位數是00000101 ,現在要把它倒過來,變成10100000,請問怎麼玩?
答案網路都爛大街了,接下來講下想法:
1、首先要有2個變量,
1 )臨時變數叫做 $xxoo , 初始值是0(十進位),二進位也就是00000000
2)原始值變量,叫做$shit , 就是要做處理的00000101
#### 2、3個步驟
1) 把$xxoo 左移一位 2) 判斷$shit的二進位值最後一位是不是1,如果是,則給$ xxoo的十進位值加1 ,這個很重要看成二進位就是把00000000 變成00000001,否則$xxoo 初始值是00000000, 這個進行移位移個p啊。 。 。都是零,那怎麼判斷二進位最後一位是不是1?你要透過截取字串或正規判斷(不是不行哦)答案:只要把原值和1(也就是00000001) 進行邏輯與操作(1&1 才是1 , 1&0 或0&1 一律是0)
3) 接下來把$shit 右移1位
#3) 接下來把$shit 右移1位
# 1)如原來是00000101 , 移動後變成了00000也就是說$xxoo和shit同時移,一個左一個右,當shit最後一位是1的時候能被我們判斷到,於是給$xxoo的末位也置為1,這樣就能實現xxoo和shit既同步又相反)上面的過程反覆執行8 次,就能得到10100000
完整程式碼如下
function rev($n)<br/>{<br/> $xxoo = 0;<br/> for ($i = 0; $i < 8; $i++) {<br/> $xxoo = $xxoo << 1;<br/> if (($n & 1) == 1) {<br/> $xxoo++;<br/> }<br/> $n = $n >> 1;<br/> }<br/> return $xxoo;<br/>}<br/>echo decbin(rev(5));<br/>
##不過要注意的是,上面的函數支援1位元組的數字(只支援8位)
網路上的面試題目是32位數字,接下來的程式碼是支援通用位數的(這個代碼網路上沒有哦~~~)。大家思考與理解一下,就不多解釋了,需要有一些PHP程式碼功底:function rev($n)<br/>{<br/> $num=intval(strlen(decbin($n))/8); //整除 8<br/> if($num==0)<br/> $bitLen=8;//最小8位<br/> else<br/> {<br/> if((strlen(decbin($n)) % 8)>0)<br/> $bitLen=($num+1)*8;<br/> else<br/> $bitLen=$num*8;<br/> }<br/> echo “原始值二进制:”.str_pad(decbin($n),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/> $xxoo = 0;<br/> for ($i = 0; $i < $bitLen; $i++) {<br/> $xxoo = $xxoo << 1;<br/> if (($n & 1) == 1) {<br/> $xxoo++;<br/> }<br/> $n = $n >> 1;<br/> }<br/> echo “反转后值二进制:”.str_pad(decbin($xxoo),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/> return $xxoo;<br/>}<br/>
登入後複製
function rev($n)<br/>{<br/> $num=intval(strlen(decbin($n))/8); //整除 8<br/> if($num==0)<br/> $bitLen=8;//最小8位<br/> else<br/> {<br/> if((strlen(decbin($n)) % 8)>0)<br/> $bitLen=($num+1)*8;<br/> else<br/> $bitLen=$num*8;<br/> }<br/> echo “原始值二进制:”.str_pad(decbin($n),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/> $xxoo = 0;<br/> for ($i = 0; $i < $bitLen; $i++) {<br/> $xxoo = $xxoo << 1;<br/> if (($n & 1) == 1) {<br/> $xxoo++;<br/> }<br/> $n = $n >> 1;<br/> }<br/> echo “反转后值二进制:”.str_pad(decbin($xxoo),$bitLen,’0′,STR_PAD_LEFT).”<br/>”;<br/> return $xxoo;<br/>}<br/>
#呼叫測試echo rev(4);<br/>echo rev(43261596);<br/>
登入後複製
###結果##### #echo rev(4);<br/>echo rev(43261596);<br/>
原始值二进制:00000100<br/>反转后值二进制:00100000<br/>32原始值二进制:00000010100101000001111010011100<br/>反转后值二进制:00111001011110000010100101000000<br/>964176192<br/>
以上是訪談題之:顛倒二進位位元的實作思維講解(PHP通用版)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

寫在前面&筆者的個人理解目前,在整個自動駕駛系統當中,感知模組扮演了其中至關重要的角色,行駛在道路上的自動駕駛車輛只有通過感知模組獲得到準確的感知結果後,才能讓自動駕駛系統中的下游規控模組做出及時、正確的判斷和行為決策。目前,具備自動駕駛功能的汽車中通常會配備包括環視相機感測器、光達感測器以及毫米波雷達感測器在內的多種數據資訊感測器來收集不同模態的信息,用於實現準確的感知任務。基於純視覺的BEV感知演算法因其較低的硬體成本和易於部署的特點,以及其輸出結果能便捷地應用於各種下游任務,因此受到工業

C++中機器學習演算法面臨的常見挑戰包括記憶體管理、多執行緒、效能最佳化和可維護性。解決方案包括使用智慧指標、現代線程庫、SIMD指令和第三方庫,並遵循程式碼風格指南和使用自動化工具。實作案例展示如何利用Eigen函式庫實現線性迴歸演算法,有效地管理記憶體和使用高效能矩陣操作。

C++sort函數底層採用歸併排序,其複雜度為O(nlogn),並提供不同的排序演算法選擇,包括快速排序、堆排序和穩定排序。

人工智慧(AI)與執法領域的融合為犯罪預防和偵查開啟了新的可能性。人工智慧的預測能力被廣泛應用於CrimeGPT(犯罪預測技術)等系統,用於預測犯罪活動。本文探討了人工智慧在犯罪預測領域的潛力、目前的應用情況、所面臨的挑戰以及相關技術可能帶來的道德影響。人工智慧和犯罪預測:基礎知識CrimeGPT利用機器學習演算法來分析大量資料集,識別可以預測犯罪可能發生的地點和時間的模式。這些資料集包括歷史犯罪統計資料、人口統計資料、經濟指標、天氣模式等。透過識別人類分析師可能忽視的趨勢,人工智慧可以為執法機構

01前景概要目前,難以在檢測效率和檢測結果之間取得適當的平衡。我們研究了一種用於高解析度光學遙感影像中目標偵測的增強YOLOv5演算法,利用多層特徵金字塔、多重偵測頭策略和混合注意力模組來提高光學遙感影像的目標偵測網路的效果。根據SIMD資料集,新演算法的mAP比YOLOv5好2.2%,比YOLOX好8.48%,在偵測結果和速度之間達到了更好的平衡。 02背景&動機隨著遠感技術的快速發展,高解析度光學遠感影像已被用於描述地球表面的許多物體,包括飛機、汽車、建築物等。目標檢測在遠感影像的解釋中

二進位演算法是一種基於二進制數的運算方法,其基本運算包括加法、減法、乘法和除法。除了基本運算外,二進位演算法還包括邏輯運算、位移運算等操作。邏輯運算包括與、或、非等操作,位移運算包括左移和右移操作。這些操作都有對應的規則和操作數的要求。

一、58畫像平台建置背景首先和大家分享下58畫像平台的建造背景。 1.傳統的畫像平台傳統的想法已經不夠,建立用戶畫像平台依賴數據倉儲建模能力,整合多業務線數據,建構準確的用戶畫像;還需要數據挖掘,理解用戶行為、興趣和需求,提供演算法側的能力;最後,還需要具備數據平台能力,有效率地儲存、查詢和共享用戶畫像數據,提供畫像服務。業務自建畫像平台和中台類型畫像平台主要區別在於,業務自建畫像平台服務單條業務線,按需定制;中台平台服務多條業務線,建模複雜,提供更為通用的能力。 2.58中台畫像建構的背景58的使用者畫像

寫在前面&筆者的個人理解在自動駕駛系統當中,感知任務是整個自駕系統中至關重要的組成部分。感知任務的主要目標是使自動駕駛車輛能夠理解和感知周圍的環境元素,如行駛在路上的車輛、路旁的行人、行駛過程中遇到的障礙物、路上的交通標誌等,從而幫助下游模組做出正確合理的決策和行為。在一輛具備自動駕駛功能的車輛中,通常會配備不同類型的信息採集感測器,如環視相機感測器、雷射雷達感測器以及毫米波雷達感測器等等,從而確保自動駕駛車輛能夠準確感知和理解周圍環境要素,使自動駕駛車輛在自主行駛的過程中能夠做出正確的決斷。目
