C++ 为什么此代码会导致0?

C++ 为什么此代码会导致0?,c++,C++,我有以下代码 #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

我有以下代码

#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的任何值”都为零,而是小于0x01000000(即16777216)的x的任何正值都为零


所有这些都无助于解释“二进制数据的偏置指数”。这听起来像是32位浮点(IEEE)数的指数。除其他外,您可能需要担心表示的尾端性。

您得到的是零,因为您右移了24位,这将使您的有效位从末尾移走,并用左侧的零替换它们。

您的输入是什么?你试过所有的号码吗?你试过哪些边缘案例?代码实际上将x乘以2,然后将结果除以2^24。因此,它必须相对较大才能为零。但是任何大于2^23的数字和许多负数都应该返回none-zero。请注意,这是一个有根据的猜测,因为我没有铅笔和纸来检查
Computation of the biased exponent Ex of a binary32 datum x.