C語言中強制型別轉換是如何實現的?

時間 2021-06-08 09:39:05

1樓:涇渭漳淮

強制轉換時怎麼實現的?通常是由單獨的CPU指令實現的,也就是硬體實現的。

5立方之後是125,125開立方之後是幾?嚴格的數學上應該是5,但實際上計算機有精度的限制,計算結果會有誤差,計算機計算得到的結果可能是4.9999999999999435452340065849之類的,①將這個值直接取整就變成4了,這個過程通常由硬體完成,②把這個值列印出來的時候(把浮點數變成字串)有精度截斷,這個截斷由軟體完成。

2樓:一直流浪

因為在計算機中儲存的數字是離散分布的,比如1.0/3=0.33333333333,

0.333333333333 * 3=0.9999999999999,當然在計算機中精度會更高,而且有很多演算法優化到最接近的值,但是還是無法達到原值,所以1.

0/3*3 < 0,如果是int型別,用於向下取整的特性會直接等於0,如int a = 0.99,結果a=0。

所以上述問題,你先立方再開方,得到數可能會無限逼近,再強制轉換為int,向下取整,得到的數就會比原數字小

希望可以幫到你

程式語言中內建型別是怎麼實現的?

Yunfei Lu 都有。一種語言,首先有基本型別,其實就是資料在記憶體的布局,方便表示不同種類的資料,例如整型和浮點是一定要有的,因為cpu的規範。再組合得到陣列,函式型別等,再發展出代數型別,然後包裝成介面 類 泛型等高階概念。基本型別在編譯器裡規定。至於標準庫中定義的型別,通常是某種組合的封裝...

C語言中byte強制轉化成bit是怎麼轉化的?

插眼。沒懂你意思,看看大家怎麼回答。涉及到知識盲區,C語言裡是沒有bit這個型別的,也沒有Byte,只有char是佔乙個位元組 不過要我寫我大概會這樣 char Byte 8 char bit Byte 7 或者 char Byte 0b10000001 char bit 8 for int i 0...

小白求解 c語言型別轉換int轉double後除法輸出有問題 加減乘都沒有

Fujie Chen 你一開始的 double a b 實際上做的是整型a除以整型b得到乙個整型結果然後強制轉換到double,運算過程中因為都是整型變數,所以直接捨棄小數字。第二次的 double a b 做的呢是先把a強制轉換成double,再去除以b。實際上是浮點型變數除以整型變數,做運算的時...