How to pass a signed int to a 15-bit bit field?

I have a bit bit:

int somefield : 15;

I am trying to convert an int to 15 bits (may be positive or negative).

What is the best practice for effective use?

+4
source share
2 answers

I am trying to convert an int to 15 bits (may be positive or negative). What is the best practice for this?

int 15- , . int signed , C, . signed int unsigned. .

signed int somefield:15;
...
x.somefield = 12345;
int y = x.somefield;

int 15- , unsigned, . , OP , int . , . , , .

unsigned somefield:15;
...
x.somefield = 123456;

x.somefield = -1;
int y = x.somefield >= 0x4000 ? x.somefield - 0x8000 : x.somefield;

, , , . .

signed int somefield 15;
...
if (i >= INT15_MIN && i <= INT15_MAX) x.somefield = i;
else TBD();

int y = x.somefield;
+3

chux, ! , :

typedef struct {
    unsigned int firstletter: 5;
    unsigned int secondletter: 5;
    unsigned int thirdletter: 5;
  } data_in_32_format;

typedef struct {
    unsigned int somedata: 15;
  } data;

typedef union {
    data_in_32_format;
    data;
  } common_data;

, , :

common_data entry;
entry.data = getint_in_decimal_format;

32:

print32("%c%c%c\n", entry.data_in_32_format.thirdletter
                  , entry.data_in_32_format.secondletter
                  , entry.data_in_32_format.firstletter);

- char (0-9 = > , > 9 - , ASCII +55 32- (A 10 ..).

0

All Articles