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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

据说有99%的人都会做错的面试题

發(fā)布時(shí)間:2025/3/8 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 据说有99%的人都会做错的面试题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這道題主要考察了面試者對浮點(diǎn)數(shù)存儲格式的理解。另外,請不要討論該題本身是否有意義之類的話題。本題只為了測試面試者相關(guān)的知識是否掌握,題目本身并沒有實(shí)際的意義。

下面有6個浮點(diǎn)類型變量,其中前三個是float類型的,后三個是double類型的。題目的代碼如下:

float f_v1 = 20; float f_v2 = 20.3; float f_v3 = 20.5;double d_v1 = 20; double d_v2 = 20.3; double d_v3 = 20.5;cout << ((f_v1 == d_v1)?"true":"false") << endl; cout << ((f_v2 == d_v2)?"true":"false") << endl; cout << ((f_v3 == d_v3)?"true":"false") << endl;

問題有如下三個:

  • 本題的運(yùn)行結(jié)果是什么
  • 請根據(jù)本題的運(yùn)行結(jié)果解釋其原因
  • 如果某個cout語句的輸出結(jié)果為false,在不改變變量定義語句的前提下,如何扔棄相等呢?
  • 下面我先簡要說說如何解答本題,最后再給出答案。

    ? ? ?首先應(yīng)先了解float和double的存儲方式。這里先拿float為例。float一共占4個字節(jié),共32位。分為3部分:符號位、指數(shù)位和尾數(shù)位。分別占1位、8位和23位,存儲結(jié)構(gòu)如圖1所示。

                                              圖1

    ? ? ?其中如果浮點(diǎn)數(shù)為正值,符號位為0,否則為1。指數(shù)位采用移位存儲,也就是如果表示10^4,需要將4與127(二進(jìn)制是01111111)相加存入指數(shù)位。尾數(shù)位決定了float的精度。尾數(shù)一共23位,最多可以表示8388607個值,由于沒有到9999999,所以float的精度為6,如果表示的數(shù)小于8388608,那么精度可到7位。這也是為什么有的書中說float的精度是6到7位的原因。這里并不是所有的數(shù)都能精確到7位。

    ??? 另外,所謂的精度是指科學(xué)計(jì)數(shù)法E前面的數(shù)字的小數(shù)個數(shù)。例如,1.2345678E10。

    這個數(shù)用float表示是可以精確到7位,因?yàn)?345678小于8388608。如果是1. 9388648E10,那么就只能精確到6位了。

    如果理解了這個,還需要了解如何將十進(jìn)制浮點(diǎn)數(shù)轉(zhuǎn)換為二進(jìn)制浮點(diǎn)數(shù),別告訴我你不會,如果真不會的話,回大學(xué)從念吧。總之,浮點(diǎn)數(shù)轉(zhuǎn)換是分別轉(zhuǎn)換整數(shù)和小數(shù)部分。整數(shù)部分除2,小數(shù)部分乘2。例如,20.5轉(zhuǎn)換為二進(jìn)制是10100.1,20.3轉(zhuǎn)換為二進(jìn)制如下:

    10100.0100110011001...1001

    ? ? 其中“...”表示1001部分無限循環(huán)。也就是說20.3轉(zhuǎn)換為二進(jìn)制浮點(diǎn)數(shù)是一個而無限循環(huán)的二進(jìn)制浮點(diǎn)數(shù)。

    最后,需要知道如何用科學(xué)計(jì)數(shù)法表示二進(jìn)制浮點(diǎn)數(shù)(長見識了吧,二進(jìn)制也可以用科學(xué)計(jì)數(shù)法)。20.5的科學(xué)計(jì)數(shù)法表示是:1.01001E100

    20.3的科學(xué)計(jì)數(shù)法表示是:1.0100010011001...E100

    現(xiàn)在就可以一個蘿卜一坑個了,將對應(yīng)的數(shù)填入圖1的三個區(qū)域吧。

    ?

    ? ? 現(xiàn)在將20.5和20.3都存入double類型的變量,就可以一下看出本題的結(jié)果了。double占64位,8個字節(jié)。符號位占1位,指數(shù)位占11位,尾數(shù)位占52位。精度是15或16,原理和float一樣。

    ?

    現(xiàn)在公布一下答案:

    true

    false

    true

    ?

    如果還沒理解其中的奧秘,可以看詳細(xì)的視頻講解。

    本文轉(zhuǎn)自銀河使者博客園博客,原文鏈接http://www.cnblogs.com/nokiaguy/p/3929587.html如需轉(zhuǎn)載請自行聯(lián)系原作者


    銀河使者

    總結(jié)

    以上是生活随笔為你收集整理的据说有99%的人都会做错的面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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