Get bits of number.

Raldi (view profile)

on 13 Apr 2015
Latest activity Edited by Guillaume

on 13 Apr 2015

Guillaume (view profile)

I have a 16 bit double I got from using wavread that I want to get the first 8 bits from.
As an example lets say I have 67. Inside my computer it must be represented as a series of bits, 0111001 in this case. So lets say that I just want to have the last for of them 1001.
How can this be done?

Guillaume

Guillaume (view profile)

on 13 Apr 2015
You do not have a 16 bit double, since the double type is a 64-bit floating point number. single is 32-bit FP, and I'm not aware of a common 16-bit FP type.
You may have a 16-bit integer (signed or unsigned?)
Guillaume

Guillaume (view profile)

on 13 Apr 2015
Also, 67 in binary is not 00111001:
>>dec2bin(67, 8)
ans = 0100011
Raldi

Raldi (view profile)

on 13 Apr 2015
I probably meant 57. Also yeah they are double but I calculated that I only need 16 bits to represent all numbers in that range, all the rest are zeros.

Guillaume (view profile)

on 13 Apr 2015

Assuming you have a 16 bit integer, the simplest way to extract some bits from it is to use bitget:
n = hex2dec('AF75'); %for example, bit pattern is 1010 1111 0111 0101.
bitpattern = bitget(n, 1:8, 'uint16')
returns
bitpattern =
1 0 1 0 1 1 1 0
You can also use dec2bin but that involves string conversion so is going to be slower.

Raldi

Raldi (view profile)

on 13 Apr 2015
I get
Error using bitget
Too many input arguments.
I have to remove 'uint16' from the arguments. Even if I do so though I get
Inputs must be non-negative integers.
I have vR2011b by the way.
Guillaume

Guillaume (view profile)

on 13 Apr 2015
I'm not sure when the type specifier was added to bitget, I think it's fairly recent.
On older versions of matlab, this should work:
n = hex2dec('AF75'); %for example, bit pattern is 1010 1111 0111 0101.
bitpattern = bitget(uint16(n), 1:8)
That is convert your number (of type double) to an unsigned integer type.