This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

IAR Embedded Workbench ARM compiler

Hi, I'm using IAR Embedded Workbench ARM are: being int a; and unsigned char b = 0x03; a = ~ b; should not be 0xfc and not 0xfffffffc? Is this a bug or is it deliberate?

Parents
  • Hi,

    as the results, the compiler is right.

    Because the operations are performed with the type matching,

    a = ~b;

    is identical to

    a = (int)~b; .

    Also,

    a = (int)~b;

    means

    if(~b[7]==1) a = {0xffffff, ~b[7:0]};

    else         a = {0x000000, ~b[7:0]}; .

    If you want to put 0xfc into the variable a, you should write as the following.

    a = (unsigned char)~b;

    Best regards,

    Yasuhiko Koumoto.

Reply
  • Hi,

    as the results, the compiler is right.

    Because the operations are performed with the type matching,

    a = ~b;

    is identical to

    a = (int)~b; .

    Also,

    a = (int)~b;

    means

    if(~b[7]==1) a = {0xffffff, ~b[7:0]};

    else         a = {0x000000, ~b[7:0]}; .

    If you want to put 0xfc into the variable a, you should write as the following.

    a = (unsigned char)~b;

    Best regards,

    Yasuhiko Koumoto.

Children
No data