[英]Left shift Float type
嘗試時遇到編譯器錯誤
float_val=float_val<<1;
它給出了一個錯誤,說“錯誤C2296:'<<':非法,左操作數的類型為'float'”
不能左移左浮球? 為什么會這樣?
你不能留下移位float
變量,因為(a)你的FPU通常不會有一個桶式移位器暴露給你,所以物理上不能生成代碼來做到這一點,(b)它甚至意味着什么? 基礎位表示由多個具有不同含義的字段組成,您真的希望這些位相互滲透嗎?
如果你想將該變量中的數字乘以2,那么你應該這樣做。
如果你想重新解釋float,因為某些類型的左移有意義(例如一個適當大的無符號整數類型),對於像Carmack的平方根那樣可怕的一些黑客,嗯,你也可以這樣做,但在現代硬件上它是高度的不太可能你真的需要:認真考慮是否有更好的方法來做你想要的。
如果你想快速乘以或除以2的冪,請檢查標准函數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.