成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

一道看似簡(jiǎn)單的面試題

kid143 / 901人閱讀

摘要:二進(jìn)制本身就是為這個(gè)數(shù)字而使用的,所以說(shuō)這道面試題直指二進(jìn)制的使用是沒(méi)錯(cuò)的。正負(fù)在二進(jìn)制中,第一位為的是負(fù)數(shù),是正數(shù)。

前言
使用PHP,給定一個(gè)數(shù),判斷這個(gè)數(shù)是否是二的N次方

這樣看似簡(jiǎn)單的一個(gè)面試題, 實(shí)際牽出了很多基礎(chǔ)知識(shí),本章在為大家補(bǔ)習(xí)基礎(chǔ)知識(shí)的情況下來(lái)解答這道題。先亮出答案

function exponentiation($number)
{
    if ($number < 0) {
        return false;
    }
        
    if (($number & ($number - 1)) == 0) {
        return true;
    } else {
        return false;
    }
}
    
exponentiation (2);
exponentiation (8);
exponentiation (16);
exponentiation (32);
exponentiation (128);

這是查閱后的最最標(biāo)準(zhǔn)的答案,其他類(lèi)似通過(guò)循環(huán)等等答案就略過(guò)把。

運(yùn)算

實(shí)際這道面試題考的并非是算法,而是作為開(kāi)發(fā)人員的你“底子”夠不夠。
運(yùn)算符應(yīng)該是每門(mén)語(yǔ)言hello world 后立馬要學(xué)習(xí)的。運(yùn)算符分很多種,賦值運(yùn)算符,比較運(yùn)算符等等。我想大多自學(xué)或者培訓(xùn)出道的沒(méi)有經(jīng)過(guò)系統(tǒng)化學(xué)習(xí)的童鞋的,對(duì)這塊的知識(shí)應(yīng)該很薄弱把。當(dāng)然賦值、比較什么的很熟悉,因業(yè)務(wù)基本逃不過(guò)這些。但對(duì)位運(yùn)算符,你真的吃透了嗎?

這道題的考點(diǎn)一是位運(yùn)算符的使用,上面說(shuō)過(guò)了本題考察的并非算法,而是你對(duì)二進(jìn)制的了解,而在php中能操作二進(jìn)制的運(yùn)算符貌似 (我的知識(shí)范圍內(nèi)) 只有位運(yùn)算符
PHP位運(yùn)算符 (部分)

本道面試題用到了 & 所以不詳解其他的運(yùn)算符,需要更多了解請(qǐng)移步官方
http://php.net/manual/zh/lang...

運(yùn)算符 附加信息
& 按位與運(yùn)算符
^ 按位異或運(yùn)算符
按位與

按位與以簡(jiǎn)單易懂的方式來(lái)講就是二進(jìn)制位不相同的抵消,相同的保留

舉幾個(gè)栗子

公式 -> 轉(zhuǎn)為二進(jìn)制后的公式 -> 二進(jìn)制結(jié)果 -> 十進(jìn)制結(jié)果
2 & 3 -> 0010 & 0011 -> 0010 = 2
10 & 7 -> 1010 & 0111 -> 0010 = 2
32 & 70 -> 0100000 & 1000110 -> 0000000 = 0
按位異或

按位異或以簡(jiǎn)單易懂的方式來(lái)講就是二進(jìn)制位相同的抵消,不相同的保留

舉幾個(gè)栗子

公式 -> 轉(zhuǎn)為二進(jìn)制后的公式 -> 二進(jìn)制結(jié)果 -> 十進(jìn)制結(jié)果
2 ^ 3 -> 0010 ^ 0011 -> 0001 = 1
10 ^ 7 -> 1010 ^ 0111 -> 1101 = 13
32 ^ 70 -> 0100000 ^ 1000110 -> 1100110 = 102
進(jìn)制

借用百度百科上的一段話

二進(jìn)制是計(jì)算技術(shù)中廣泛采用的一種數(shù)制。二進(jìn)制數(shù)據(jù)是用0和1兩個(gè)數(shù)碼來(lái)表示的數(shù)。它的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)二”。

二進(jìn)制本身就是為2這個(gè)數(shù)字而使用的,所以說(shuō)這道面試題直指二進(jìn)制的使用是沒(méi)錯(cuò)的。2的n次方則就是

n 公式 結(jié)果
1 2 2
2 2x2 4
3 2x2x2 8
4 2x2x2x2 16

換算成二進(jìn)制的表格是

n 公式 結(jié)果
1 2 000010
2 2x2 000100
3 2x2x2 001000
4 2x2x2x2 010000

由此看出2的n次方的二進(jìn)制最高位是1,其余補(bǔ)0,(n&(n-1))==0 并且 n> 0 的情況下必定是2的n次方,為什么要-1呢?在二進(jìn)制中每一位必須都不相同&后才會(huì)得出0,上述已經(jīng)講解了&的運(yùn)算結(jié)果。例如十進(jìn)制的16

16 & (16 - 1) = 
010000 & (001111) = 0 

不要糾結(jié)(n&(n-1))==0 這個(gè)公式是怎么來(lái)的,作為程序員,我感覺(jué)應(yīng)該把更多時(shí)間放到反推上面來(lái),去應(yīng)證這個(gè)公式的正確性。

驗(yàn)證是否是2的n次方,笨的方法就是一直除2,除到最后等于0則就是2的次方,所以公式如上
補(bǔ)位

如果是2個(gè)二進(jìn)制進(jìn)行運(yùn)算時(shí),計(jì)算機(jī)會(huì)統(tǒng)一位數(shù),例如

01
011
<------> 
001
011

計(jì)算機(jī)會(huì)將01自動(dòng)補(bǔ)一位為001去方便運(yùn)算。

正負(fù)

在二進(jìn)制中,第一位為1的是負(fù)數(shù),0是正數(shù)。如果沒(méi)有補(bǔ)零的情況下

10000000000
01111111111

雖然計(jì)算后也是0,但它并不是2的n次方,因?yàn)榈谝唤M二進(jìn)制是負(fù)數(shù)。

補(bǔ)充

由上述題補(bǔ)充的另外一道題

給定任意數(shù),計(jì)算是2的幾次方?
function power($number){
    if ($number < 0) {
        return false;
    }
    
    if (($number & ($number - 1)) == 0) {
        
        // 數(shù)學(xué)不好的,就看下面的方法
        // $number = decbin($number);
        // return (mb_strlen($number)-1);
        // 數(shù)學(xué)可以的就看下面的方法
        return floor(log($number,2));
    } else {
        return false;
    }
}

判斷是否是2的n次方

如果是則將十進(jìn)制數(shù)字轉(zhuǎn)為二進(jìn)制

計(jì)算總長(zhǎng)度-1獲取到是2的幾次方,按照0的個(gè)數(shù)來(lái)計(jì)算

致謝

感謝你看到這里,我也是文中提起的沒(méi)好好學(xué)基礎(chǔ)的一名程序員,但當(dāng)你看到我這篇文章后,希望你也可以提起精神,去重溫下基礎(chǔ),對(duì)你未來(lái)的職業(yè)生涯會(huì)起作用的。本章內(nèi)容純屬自己理解,如有出入,請(qǐng)大佬們監(jiān)督批評(píng),謝謝

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29078.html

相關(guān)文章

  • 求職準(zhǔn)備 - 收藏集 - 掘金

    摘要:一基礎(chǔ)接口的意義百度規(guī)范擴(kuò)展回調(diào)抽象類(lèi)的意義想不想通過(guò)一線互聯(lián)網(wǎng)公司面試文檔整理為電子書(shū)掘金簡(jiǎn)介谷歌求職記我花了八個(gè)月準(zhǔn)備谷歌面試掘金原文鏈接翻譯者 【面試寶典】從對(duì)象深入分析 Java 中實(shí)例變量和類(lèi)變量的區(qū)別 - 掘金原創(chuàng)文章,轉(zhuǎn)載請(qǐng)務(wù)必保留原出處為:http://www.54tianzhisheng.cn/... , 歡迎訪問(wèn)我的站點(diǎn),閱讀更多有深度的文章。 實(shí)例變量 和 類(lèi)變量...

    cuieney 評(píng)論0 收藏0
  • 程序語(yǔ)言

    摘要:一面應(yīng)該還問(wèn)了其他內(nèi)容,但是兩次面試多線程面試問(wèn)題和答案采訪中,我們通常會(huì)遇到兩個(gè)主題采集問(wèn)題和多線程面試問(wèn)題。多線程是關(guān)于并發(fā)和線程的。我們正在共享重要的多線程面試問(wèn)題和答案。。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 【碼農(nóng)每日一題】Java 內(nèi)部類(lèi)(Part 2)相關(guān)面試題 關(guān)注一下嘛,又不讓你背鍋!問(wèn):Ja...

    mtunique 評(píng)論0 收藏0
  • 程序語(yǔ)言

    摘要:一面應(yīng)該還問(wèn)了其他內(nèi)容,但是兩次面試多線程面試問(wèn)題和答案采訪中,我們通常會(huì)遇到兩個(gè)主題采集問(wèn)題和多線程面試問(wèn)題。多線程是關(guān)于并發(fā)和線程的。我們正在共享重要的多線程面試問(wèn)題和答案。。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 【碼農(nóng)每日一題】Java 內(nèi)部類(lèi)(Part 2)相關(guān)面試題 關(guān)注一下嘛,又不讓你背鍋!問(wèn):Ja...

    stefan 評(píng)論0 收藏0
  • 一道簡(jiǎn)單面試引發(fā)思考

    摘要:另一個(gè)問(wèn)題,就是我下面要提及的作用域問(wèn)題,我當(dāng)時(shí)思考的時(shí)間太久了這是回憶中的面試題實(shí)際略有差異,不糾結(jié)了說(shuō)一下腳本的運(yùn)行結(jié)果引用錯(cuò)誤中給出的錯(cuò)誤提示。 版權(quán)聲明:此文首發(fā)于我的簡(jiǎn)書(shū)賬號(hào)人生還有多少個(gè)二十年,轉(zhuǎn)載請(qǐng)注明出處。 此處有幾百字嘮叨:   當(dāng)天,我早早起床,跨越上百公里,高德導(dǎo)航,路人指點(diǎn),跌跌撞撞到達(dá)招聘會(huì)現(xiàn)場(chǎng),當(dāng)時(shí)已是中午十二點(diǎn)半,吃了午餐(半瓶白開(kāi)水),開(kāi)始準(zhǔn)備投遞...

    wpw 評(píng)論0 收藏0
  • 一道面試

    摘要:寫(xiě)在前面這道題是本人在面試一家公司時(shí)的一個(gè)簡(jiǎn)單的基礎(chǔ)問(wèn)題,公司就不透露了,算是國(guó)內(nèi)很有名的公司,本人面試的只是實(shí)習(xí)崗位。 寫(xiě)在前面 這道題是本人在面試一家公司時(shí)的一個(gè)簡(jiǎn)單的基礎(chǔ)問(wèn)題,公司就不透露了,算是國(guó)內(nèi)很有名的公司,本人面試的只是實(shí)習(xí)崗位。一些大的問(wèn)題就不再說(shuō)了,每個(gè)人遇到的可能都是不一樣的,基本會(huì)圍繞著我們平常所常用的東西來(lái)聊,下面就說(shuō)一道小題: 題目 寫(xiě)出下面幾個(gè)表達(dá)式的結(jié)果:...

    sihai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<