How can i store 2 numbers in a 1 byte char?

限于喜欢 提交于 2019-12-08 07:54:15

问题


I have the question of the title, but If not, how could I get away with using only 4 bits to represent an integer?

EDIT really my question is how. I am aware that there are 1 byte data structures in a language like c, but how could I use something like a char to store two integers?


回答1:


You can store two 4-bit numbers in one byte (call it b which is an unsigned char).

Using hex is easy to see that: in b=0xAE the two numbers are A and E.

Use a mask to isolate them:

a = (b & 0xF0) >> 4

and

e = b & 0x0F

You can easily define functions to set/get both numbers in the proper portion of the byte.

Note: if the 4-bit numbers need to have a sign, things can become a tad more complicated since the sign must be extended correctly when packing/unpacking.




回答2:


In C or C++ you can use a struct to allocate the required number of bits to a variable as given below:

#include <stdio.h>
struct packed {
    unsigned char a:4, b:4;
};
int main() {
    struct packed p;
    p.a = 10;
    p.b = 20;
    printf("p.a %d p.b %d size %ld\n", p.a, p.b, sizeof(struct packed));
    return 0;
}

The output is p.a 10 p.b 4 size 1, showing that p takes only 1 byte to store, and that numbers with more than 4 bits (larger than 15) get truncated, so 20 (0x14) becomes 4. This is simpler to use than the manual bitshifting and masking used in the other answer, but it is probably not any faster.



来源:https://stackoverflow.com/questions/30961168/how-can-i-store-2-numbers-in-a-1-byte-char

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!