我正在尝试使用位操作<<在我的代码下面。 这是我的tinyfp2int函数,它在给定二进制格式的无符号字符类型的情况下执行一堆位操作。
#include <stdio.h>
#define TMin 0b1<<31
typedef unsigned char tinyfp;
int tinyfp2int(tinyfp x)
{
int sign = (x>>7);
int result = 0;
int exp[4];
int exponent=0;
int temp=0;
//get the exponent
int i=0;
for(i=0;i<4;i++){
exp[3-i] = (x>>(3+i))%2;
exponent += exp[3-i]<<i;
}
exponent -= 7;
//now bitwise operations.
result += (1<<exponent); //ERROR!!!
printf("exponent is %d ,shifting 1 with exponent is %d\n",exponent,1<<exponent); // I put this code in because there was a dummy value was inserted on the line above
if(sign>0)
return -result;
else
return result;
}
最后,这是我的主要功能。
void main(){
tinyfp2int(0b00011110);
printf("%d\n",(1<<-4));
}
但是,如果我运行此代码,结果是
exponent is -4 ,shifting 1 with exponent is 268435456
0
我真的不明白为什么主函数中的1&lt;&lt;&lt; -4操作起作用,而tinyfp2int函数中的1&lt;&lt; -4操作继续返回虚值。我真的很感激任何解释。提前谢谢!