比特移位计算<<不断返回错误的值

时间:2018-03-26 06:05:54

标签: c bit-manipulation bitwise-operators

我正在尝试使用位操作<<在我的代码下面。 这是我的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操作继续返回虚值。我真的很感激任何解释。提前谢谢!

0 个答案:

没有答案