如何理解這句話 「浮點一般都是不可重入的,printf 經

時間 2021-09-11 22:33:35

1樓:

浮點一般都是不可重入的:

對於定點的計算機體系,浮點運算語句,編譯後,會是很長一段機器指令序列,若涉及到全域性的浮點變數,必然不能在一條指令完成,導致不可重入。

對於具有浮點運算能力的計算機體系,涉及到的全域性浮點變數運算,有可能一條浮點運算指令完成,則是可重入,否則不可重入。另外,若os對於浮點暫存器在程序切換或中斷響應時不儲存,肯定不重入。

printf()經常有重入和效能上的問題:

先解釋重入的問題:printf()函式與硬體相關,硬體埠相當於全域性變數,函式內部的全域性變數,導致該函式不可重入。效能上的問題:

對於併發或同時執行的多程序或任務,若要正確使用printf()函式,必須互斥使用,在乙個程序或任務執行printf ()時,其他使用printf()的程序或任務只能等待,不能及時顯示。

2樓:匿名使用者

重入一般可以理解為乙個函式在同時多次呼叫,例如作業系統在程序排程過程中,或者微控制器、處理器等的中斷的時候會發生重入的現象。

一般浮點運算都是由專門的硬體來完成,舉個例子假設有個硬體暫存器名字叫做float,用來計算和存放浮點數的中間運算結果

假設有這麼個函式

void fun()

假如第一次執行,有個對浮點數操作運算的結果臨時存在float暫存器中,而就在這時被中斷了,而中斷函式或者另乙個程序也呼叫fun函式,這時第二次呼叫的fun函式在執行的過程中就會破壞第一次float暫存器中的結果,這樣當返回到第一次fun函式的時候,結果就不正確了。

可以把fun函式理解為printf()函式。

c需要中的列印浮點數,printf("%3.2f",123.455)其中3代表什麼?那2呢?

3樓:匿名使用者

3表示字串總長度,包括小數點和尾數。

2表示小數尾數長度。

當不足長度時會自動擴充,預設右對齊左邊補充空格。

printf("%7.2f",123.455f); // 正確的長度應該是7

printf("%8.2f",123.455f); // 長度不足8,所以左邊補乙個空格

printf("%-8.2f",123.455f); // 左對齊,所以右邊有乙個空格

printf("%7.2lf",123.455lf); // 指定輸入的字串是(double)型別,按照(long double)8位元組解釋

// 數字後面的f,lf分別表示這是乙個float或者double型別的數

// 建議手動指定型別以防止編譯器解釋錯誤

// gcc和vc解釋的結果就不一樣

4樓:匿名使用者

輸出浮點型數值,2代表輸出兩位小數,3嘛,好像是3個整數?不記得了

以下程式的執行結果是( )。 void main() { int n=8; switch(n--) { default: printf("%d ",n++); case 8:

5樓:匿名使用者

c 7因為switch(n--),n是後自減,所以先使用n後再自減(即先用8進行選擇後減為7)

所以程式跳過default 與case 8配對,由於沒有break程式往下執行case 6輸出n 即為7

c語言int相除如何得浮點出來

6樓:吉祥二進位制

可以通過強制資料型別轉換運算子()來實現。

示例**如下:

#include

int main()

執行結果:

7樓:斯卡保羅技術

被這個類似的問題困擾過:同意樓上 iamdebugman的說法,強制轉化被除數與除數,即

float t = (float) (k1) / (float)(k2);

另外一位同學的 int k1=5;

int k2=2;

float k;

k=(float)k1/k2; 結果應該是2

8樓:_鈊_煩_薏亂

必須進行型別轉換,否則無法得到2.5

因為int型,不可能搞出小數點來。

當然可以通過另外使用函式的方法來解決這個問題。但是不是多此舉麼?

你這個情況轉化成float之後再int回來值是不變的。

9樓:匿名使用者

這個很簡單,

int k1 = 5;

int k2 = 2;

float t = k1 /(float) k2 ;//強制轉換也可以int k1 = 5;

int k2 = 2;

float t = (float)k1 / k2 ;也可以改為float t = (float)k1 /(float) k2 ;

都是可以的,這個強制轉換並沒有改變你的兩個int型別,就是說k1 k2還是個int 型

10樓:匿名使用者

int k1 = 5;

int k2 = 2;

float t = (float)k1 / float(k2) ;

就可以了,就是在運算前將它們轉化

11樓:匿名使用者

把k1和k2中的乙個定義為float就可以了

12樓:智趣派

int k1 = 5;

int k2 = 2;

float t = k1*1.0 / k2 ;

給k1或者k2隨便乙個乘以1.0就行~~~

13樓:天天無知

強制轉換一下就可以了!

main()

這一段怎麼理解?請舉個例子,這句話如何理解,舉個例子說明

事物發展的普遍規律,對與錯,如社會的進步,蒸汽時代無疑是人類動力上的一大步,但現在看來頗多弊端 我國許多馬克思主義哲學原理教科書 在談到否定之否定過程時 常用 兩次否定三個階段 來加以概括 認為事物的辯證發展 是從肯定階段開始 經過第一次否定進入否定之否定階段 完成事物發展的乙個週期.筆者認為 這種...

聽到這個噩耗,真好似晴天霹靂一般,這句話什麼作用?

發生不好事,就可以用來這句話形容。猛的聽到這個噩耗真好像晴天霹靂一般,這句話的作用是起到強調的作用,突出我無法接受這個訊息。猛地聽到這個噩耗,真好似晴天霹靂一般。這個句子運用了什麼修辭手法?比喻比喻是一種常用的修辭手法,用跟甲事物有相似之點的乙事物來描寫或說明甲事物,是修辭學的辭格之一。也叫 譬喻 ...

父母總說「一碗水端不平」,你如何理解這句話呢

有機生活倡導者 一碗水這句話的字面意思就是 父母對於孩子可能有乙個偏心或者是有一點重男輕女,或者是對於兩個孩子不平等這樣的現象。所以孩子的心理才會有覺得,一碗水端不平的心理。關於這一點,其實有時候父母可能給兩個孩子的都一樣,但是孩子的需求不同,他就覺得父母不能滿足自己。所以就覺得父母是一碗水端不平,...