簡體   English   中英

左移浮動類型

[英]Left shift Float type

嘗試時遇到編譯器錯誤

float_val=float_val<<1;

它給出了一個錯誤,說“錯誤C2296:'<<':非法,左操作數的類型為'float'”

不能左移左浮球? 為什么會這樣?

你不能留下移位float變量,因為(a)你的FPU通常不會有一個桶式移位器暴露給你,所以物理上不能生成代碼來做到這一點,(b)它甚至意味着什么? 基礎位表示由多個具有不同含義的字段組成,您真的希望這些位相互滲透嗎?

如果你想將該變量中的數字乘以2,那么你應該這樣做。

如果你想重新解釋float,因為某些類型的左移有意義(例如一個適當大的無符號整數類型),對於像Carmack的平方根那樣可怕的一些黑客,嗯,你也可以這樣做,但在現代硬件上它是高度的不太可能你真的需要:認真考慮是否有更好的方法來做你想要的。

如果你想快速乘以或除以2的冪,請檢查標准函數ldexpf。顯然有點模糊:-)。

https://linux.die.net/man/3/ldexpf

浮點數在值表示級別沒有位,這就是為什么不能對它們應用按位運算的原因。

有關更多信息,請參閱此答案

移位浮點數毫無意義,因為它表示為符號位,指數和尾數的串聯。 由於移位操作是關於移位比特,因此意味着將比特從尾數移位到指數和/或移位符號比特。

由於左移位運算符被定義為乘以2的冪,因此對浮點類型非常有意義。 但是,C語言沒有定義它的用法,所以你必須使用scalbn函數或類似函數。

你不能留下float類型的移位對象。

C表示按位移位運算符的操作數應為整數類型。

你必須先將浮動變換為其他東西。 如:

float f = 128;
f = (float) (((int) f) << 1 );

在上面,f應該是256.0。

現在顯然這是有問題的,如果你從128.4開始,因為演員陣容會掉落.4。 你可能不想在第一時間使用浮動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM