right shift of integer variable
Mostrar comentarios más antiguos
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.
Respuesta aceptada
Más respuestas (4)
Richard Brown
el 24 de Abr. de 2012
0 votos
bitshift is for unsigned integers. What exactly do you want your signed right shift to do?
NDKA
el 24 de Abr. de 2012
0 votos
2 comentarios
Walter Roberson
el 24 de Abr. de 2012
In int16, (-8192) >> 12 is *not* 2: it is either -2 (sign fill) or 6 (no sign fill).
Jan
el 24 de Abr. de 2012
"b / 4096" is useful. Do you have a good reason to avoid this?
Richard Brown
el 24 de Abr. de 2012
0 votos
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
el 24 de Abr. de 2012
0 votos
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.
1 comentario
NDKA
el 24 de Abr. de 2012
Categorías
Más información sobre Logical en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!