據說有99 的人都會做錯的面試題

2021-09-07 10:50:58 字數 1760 閱讀 8003

這道題主要考察了面試者對浮點數儲存格式的理解。

另外,請不要討論該題本身是否有意義之類的話題。本題僅僅為了測試面試者相關的知識是否掌握,題目本身並沒有實際的意義。

以下有6個浮點型別變數,當中前三個是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;

問題有例如以下三個:

本題的執行結果是什麼

請依據本題的執行結果解釋其原因

假設某個cout語句的輸出結果為false,在不改變變數定義語句的前提下,怎樣扔棄相等呢?

以下我先簡要說說怎樣解答本題。最後再給出答案。

首先應先了解float和double的儲存方式。這裡先拿float為例。float一共佔4個位元組,共32位。分為3部分:符號位、指數字和尾數字。分別佔1位、8位和23位。儲存結構如圖1所看到的。

圖1當中假設浮點數為正值,符號位為0。否則為1。指數字採用移位儲存,也就是假設表示10^4。須要將4與127(二進位制是01111111)相加存入指數字。

尾數字決定了float的精度。

尾數一共23位,最多能夠表示8388607個值,由於沒有到9999999,所以float的精度為6,假設表示的數小於8388608,那麼精度可到7位。這也是為什麼有的書中說float的精度是6到7位的原因。這裡並非全部的數都能精確到7位。

另外。所謂的精度是指科學計數法e前面的數字的小數個數。

比如。1.2345678e10。

這個數用float表示是能夠精確到7位。由於2345678小於8388608。

假設是1. 9388648e10,那麼就僅僅能精確到6位了。

假設理解了這個,還須要了解怎樣將十進位制浮點數轉換為二進位制浮點數,別告訴我你不會,假設真不會的話,回大學從念吧。總之,浮點數轉換是分別轉換整數和小數部分。整數部分除2,小數部分乘2。比如,20.5轉換為二進位制是10100.1。20.3轉換為二進位制例如以下:

10100.0100110011001...1001

當中「...」表示1001部分無限迴圈。也就是說20.3轉換為二進位制浮點數是乙個而無限迴圈的二進位制浮點數。

最後。須要知道怎樣用科學計數法表示二進位制浮點數(長見識了吧,二進位制也能夠用科學計數法)。20.5的科學計數法表示是:1.01001e100

20.3的科學計數法表示是:1.0100010011001...e100

如今就能夠乙個蘿蔔一坑個了,將相應的數填入圖1的三個區域吧。

如今將20.5和20.3都存入double型別的變數,就能夠一下看出本題的結果了。double佔64位。8個位元組。

符號位佔1位。指數字佔11位,尾數字佔52位。精度是15或16,原理和float一樣。

如今發布一下答案:

true

false

true

據說有一種女人嫁給誰都能幸福

一種女人,不管她嫁的是建築工人還是國會議員,她都有能力讓自己過得幸福 我見到明依是在好友的聚會上,乙個35歲的女人,中等姿色,學歷也不高,卻嫁了個氣宇軒昂的好老公,他據說是碩士,後來做家具生意發了家,結婚10年,有乙個粉雕玉鐲的小女兒,好友說完後半妒半羨地感嘆,嫁到這麼好的男人,明依真幸福,我笑著不...

據說有一種女人嫁給誰都能幸福

一種女人,不管她嫁的是建築工人還是國會議員,她都有能力讓自己過得幸福 我見到明依是在好友的聚會上,乙個35歲的女人,中等姿色,學歷也不高,卻嫁了個氣宇軒昂的好老公,他據說是碩士,後來做家具生意發了家,結婚10年,有乙個粉雕玉鐲的小女兒,好友說完後半妒半羨地感嘆,嫁到這麼好的男人,明依真幸福,我笑著不...

據說有了TEK這款神器 就能實現你「嚮往的生活」

明星生活類綜藝節目 嚮往的生活 於不久前正式收尾,其中明星們在特定環程式設計客棧境中生活的場景展現在觀眾面前讓不少追星族們大呼過癮。值得一提的是,節目中明星們詼諧幽默的演技也給節目加分不少。記得有乙個場景是王迅拿著水管灑水,黃磊用大掃帚掃地,兩人嘻嘻哈哈地將掃地演繹成了一件有趣的事。但話又說回來,室...