Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Grabbing n bits from a byte

Tags:

I'm having a little trouble grabbing n bits from a byte.

I have an unsigned integer. Let's say our number in hex is 0x2A, which is 42 in decimal. In binary it looks like this: 0010 1010. How would I grab the first 5 bits which are 00101 and the next 3 bits which are 010, and place them into separate integers?

If anyone could help me that would be great! I know how to extract from one byte which is to simply do

int x = (number >> (8*n)) & 0xff // n being the # byte 

which I saw on another post on stack overflow, but I wasn't sure on how to get separate bits out of the byte. If anyone could help me out, that'd be great! Thanks!

like image 570
user1871869 Avatar asked Mar 06 '13 18:03

user1871869


People also ask

How do you read bits in a byte?

8 bits = 1 byte. 1,024 bytes = kilobyte. 1,024 kilobytes = megabyte. 1,024 megabytes = gigabyte.

How do I extract a bit from an integer?

printf("int has %ud bits\n", sizeof(int) * 8); sizeof() returns the size in bytes of an integer, and then you multiply that result by 8 (bits per byte in 99.999% of cases)to get the size in bits of your integer, and therefore the size of the masks you have to apply.

How do I isolate bits in Python?

*/ Step 1 : first convert the number into its binary form using bin(). Step 2 : remove the first two character. Step 3 : then extracting k bits from starting position pos from right.so, the ending index of the extracting substring is e=len(bi)-pos and starting index=e-k+1 Step 4 : extract k bit sub-string.


1 Answers

Integers are represented inside a machine as a sequence of bits; fortunately for us humans, programming languages provide a mechanism to show us these numbers in decimal (or hexadecimal), but that does not alter their internal representation.

You should revise the bitwise operators &, |, ^ and ~ as well as the shift operators << and >>, which will help you understand how to solve problems like this.

The last 3 bits of the integer are:

x & 0x7 

The five bits starting from the eight-last bit are:

x >> 3    // all but the last three bits   &  0x1F // the last five bits. 
like image 183
rici Avatar answered Sep 22 '22 05:09

rici