29-10-2013, 06:01 PM
Hello everyone,
I have an application that I need to right shift a signed variable but it seems to be giving me some issues. My initial line was:
Due to various MISRA C requirements, the code has morphed into this ridiculous block:
On the flagged line, I get the error "Underlying type of LHS operand bitwise operator is signed type: ShiftedLong". I've tried fixing that by casting the tempchar as shown below:
I even tried to go completely over the top with plans to scale it back once I isolate the problem by doing this:
It appears, I am still having the same problem. What it now appears, based on this, is that it is not possible to right shift a signed variable. Is this true or is there a way around this?
Any help you can give me would be appreciated. Thanks!
I have an application that I need to right shift a signed variable but it seems to be giving me some issues. My initial line was:
Code:
typedef unsigned char uchar8;
typedef signed long slong32;
slong32 Shifted Long;
uchar8 NumBitsShift;
ShiftedLong >>= NumBitsShift - 1u;
Due to various MISRA C requirements, the code has morphed into this ridiculous block:
Code:
typedef unsigned char uchar8;
typedef signed char schar8;
typedef signed long slong32;
slong32 Shifted Long;
uchar8 NumBitsShift;
uchar8 tempchar = 0;
slong32 templong = 0;
tempchar = (uchar8)(NumBitsShift - 1u);
if((tempchar>=1u)&&(tempchar> tempchar; /* MISRA C 12.7 Error here */
}
On the flagged line, I get the error "Underlying type of LHS operand bitwise operator is signed type: ShiftedLong". I've tried fixing that by casting the tempchar as shown below:
Code:
ShiftedLong = ShiftedLong >> (slong32)tempchar;
I even tried to go completely over the top with plans to scale it back once I isolate the problem by doing this:
Code:
ShiftedLong = (slong32)((slong32)ShiftedLong >> (slong32)tempchar);
It appears, I am still having the same problem. What it now appears, based on this, is that it is not possible to right shift a signed variable. Is this true or is there a way around this?
Any help you can give me would be appreciated. Thanks!
<t></t>