C++ 为什么我的';计数前导零';程序故障?

C++ 为什么我的';计数前导零';程序故障?,c++,C++,下面是从黑客的喜悦书中返回前导零数的代码: #include <iostream> using namespace std; int nlz(unsigned x) { int n; if (x == 0) return(32); n = 1; if ((x >> 16) == 0) {n = n +16; x = x <<16;} if ((x >> 24) == 0) {n = n + 8; x = x << 8;} if ((

下面是从黑客的喜悦书中返回前导零数的代码:

#include <iostream>
using namespace std;

int nlz(unsigned x) {
int n;
if (x == 0) return(32);
n = 1;
if ((x >> 16) == 0) {n = n +16; x = x <<16;}

if ((x >> 24) == 0) {n = n + 8; x = x << 8;}
if ((x >> 28) == 0) {n = n + 4; x = x << 4;}
if ((x >> 30) == 0) {n = n + 2; x = x << 2;}
n = n - (x >> 31);
return n;
}

int main(){
    int x;
    cin>>x;
    cout<<nlz(x)<<endl;

     return 0;
}
#包括
使用名称空间std;
整数nlz(无符号x){
int n;
如果(x==0)返回(32);
n=1;
如果((x>>16)==0{n=n+16;x=x24)==0{n=n+8;x=x>28)==0{n=n+4;x=x>30)==0{n=n+2;x=x>31);
返回n;
}
int main(){
int x;
cin>>x;

cout此算法将从32位值返回前导零位的数量。我不知道它如何为8的输入返回8。

它返回无符号整数中为零的前导位的数量,并假设整数为32位


8是0000 000 000二进制,它应该返回28,因为在第一个1位之前有28个前导位0。如果你在整数不是32位的东西上运行它,它将不起作用。

它真的返回8,还是28?如果是8,你在哪种机器上运行它?我想你把leadin弄糊涂了g零(8的32位表示为28)和尾随零(8的32位表示为3)。