2010-07-20 105 views
3

我有以下代碼爲什麼這段代碼的結果是0?

#include <stdio.h> 
#include <iostream> 
#include <stdlib.h> 
#include <stdint.h> 
using namespace std; 
int main(){ 
    int x; 
    cin>>x; 
    uint32_t Ex; 
    Ex=(x<<1)>>24; 
    cout<<Ex<<endl; 
    return 0; 
} 

,但它的任意x值給出了0?

我的任務是:

Computation of the biased exponent Ex of a binary32 datum x. 
+0

您的輸入是什麼?你嘗試過所有的數字嗎?你嘗試過哪些邊緣案例?該代碼實際上將x乘以2,然後將結果除以2^24。所以它不得不相對較大。但是任何大於2^23的數字和很多負數都不應該返回零。請注意,這是一個有教養的猜測,因爲我沒有鉛筆和紙張來檢查 – 2010-07-20 07:38:22

回答

2

也不是那麼多,你得到零「的任意x值」,但你得到零的X小於爲0x01000000任何正值(這是16777216)。

這些都不利於解釋「binary32數據的偏向指數」。這聽起來像是32位浮點數(IEEE)的指數。除此之外,您可能不必擔心代表性的排列順序。

1

由於右移了24位,因此您將零位移動到最後,並用左邊的零替換它們,因此您會變零。