right shift of integer variable
Show older comments
Hi,
I want to do a right shift to a give signed integer variable. Can any help me with the syntax please.
My C-code looks like below.
"a = b>>12;"
where the variables 'a' and 'b' are signed integer.
I tried several methods like 'bitsra', 'bitshift' etc. But I was not succesful. Kindly help me please.
Accepted Answer
More Answers (4)
Richard Brown
on 24 Apr 2012
0 votes
bitshift is for unsigned integers. What exactly do you want your signed right shift to do?
NDKA
on 24 Apr 2012
0 votes
2 Comments
Walter Roberson
on 24 Apr 2012
In int16, (-8192) >> 12 is *not* 2: it is either -2 (sign fill) or 6 (no sign fill).
Jan
on 24 Apr 2012
"b / 4096" is useful. Do you have a good reason to avoid this?
Richard Brown
on 24 Apr 2012
0 votes
the C language doesn't officially specify what happens on a right shift of a negative signed integer, it's up to any given compiler to decide. I guess you need to decide what sign you want, and then right shift an unsigned version of it. Or you could create a mex file that calls the C >> operator on your variables
Geoff
on 24 Apr 2012
0 votes
MatLab is pretty infuriating sometimes.
For example, if you cast a float as an int, it 'helpfully' rounds the value instead of truncating.
And if you cast a negative integer as unsigned, it returns zero.
Don't get me started on MatLab's fscanf function!
If you want to do a lot of shifting and don't want to multiply or divide by 2^shift, AND don't want to implement a bitshift wrapper to 'cure' the negative case, then I guess you'll need to write it in C and use MEX.
Remember, it's doubtful whether you will get any useful speed advantage using MatLab's bitshift, if that's what you want. Call me cynical =) I haven't actually tested that theory.
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!