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

Question for "<<"

Hi all

I write a sample code like

a = 1 << b;

when b = 0 , The result for a will get 2

If I uncheck "Enable ANSI integer promotion rules " ,It will get correct answer 1

can anyone tell me why ??

Thanks a lot

Parents
  • Sorry, I try this again

    It seems like even I uncheck

    "Enable ANSI integer promotion rules "

    The result also fail.

    Here is the code ,Please help to this

    void start_dmpg(void)
    {
    uchar b = ptr_reg[PCIC_PC2MPU_CMD7];

    uchar a = (ENABLE << b);
    }

    ; FUNCTION start_dmpg (BEGIN)
    ; SOURCE LINE # 169
    ; SOURCE LINE # 170
    ; SOURCE LINE # 175
    0000 900000 E MOV DPTR,#ptr_reg
    0003 E0 MOVX A,@DPTR
    0004 FE MOV R6,A
    0005 A3 INC DPTR
    0006 E0 MOVX A,@DPTR
    0007 FF MOV R7,A
    0008 8F82 MOV DPL,R7
    000A 8E83 MOV DPH,R6
    000C E582 MOV A,DPL
    000E 2447 ADD A,#047H
    0010 F582 MOV DPL,A
    0012 E583 MOV A,DPH
    0014 3404 ADDC A,#04H
    0016 F583 MOV DPH,A
    0018 E0 MOVX A,@DPTR
    0019 FF MOV R7,A
    001A 900000 R MOV DPTR,#b
    001D EF MOV A,R7
    001E F0 MOVX @DPTR,A
    ; SOURCE LINE # 177
    001F 900000 R MOV DPTR,#b
    0022 E0 MOVX A,@DPTR
    0023 FF MOV R7,A
    0024 7401 MOV A,#01H
    0026 A807 MOV R0,AR7
    0028 08 INC R0
    0029 8002 SJMP ?C0181
    002B ?C0180:
    002B C3 CLR C
    002C 33 RLC A
    002D ?C0181:
    002D D8FC DJNZ R0,?C0180
    002F FF MOV R7,A
    0030 900000 R MOV DPTR,#a
    0033 EF MOV A,R7
    0034 F0 MOVX @DPTR,A
    C51 COMPILER V7.08 CMD51 05/10/2005 14:34:41 PAGE 106

    ; SOURCE LINE # 199
    0035 ?C0012:
    0035 22 RET
    ; FUNCTION start_dmpg (END)

Reply
  • Sorry, I try this again

    It seems like even I uncheck

    "Enable ANSI integer promotion rules "

    The result also fail.

    Here is the code ,Please help to this

    void start_dmpg(void)
    {
    uchar b = ptr_reg[PCIC_PC2MPU_CMD7];

    uchar a = (ENABLE << b);
    }

    ; FUNCTION start_dmpg (BEGIN)
    ; SOURCE LINE # 169
    ; SOURCE LINE # 170
    ; SOURCE LINE # 175
    0000 900000 E MOV DPTR,#ptr_reg
    0003 E0 MOVX A,@DPTR
    0004 FE MOV R6,A
    0005 A3 INC DPTR
    0006 E0 MOVX A,@DPTR
    0007 FF MOV R7,A
    0008 8F82 MOV DPL,R7
    000A 8E83 MOV DPH,R6
    000C E582 MOV A,DPL
    000E 2447 ADD A,#047H
    0010 F582 MOV DPL,A
    0012 E583 MOV A,DPH
    0014 3404 ADDC A,#04H
    0016 F583 MOV DPH,A
    0018 E0 MOVX A,@DPTR
    0019 FF MOV R7,A
    001A 900000 R MOV DPTR,#b
    001D EF MOV A,R7
    001E F0 MOVX @DPTR,A
    ; SOURCE LINE # 177
    001F 900000 R MOV DPTR,#b
    0022 E0 MOVX A,@DPTR
    0023 FF MOV R7,A
    0024 7401 MOV A,#01H
    0026 A807 MOV R0,AR7
    0028 08 INC R0
    0029 8002 SJMP ?C0181
    002B ?C0180:
    002B C3 CLR C
    002C 33 RLC A
    002D ?C0181:
    002D D8FC DJNZ R0,?C0180
    002F FF MOV R7,A
    0030 900000 R MOV DPTR,#a
    0033 EF MOV A,R7
    0034 F0 MOVX @DPTR,A
    C51 COMPILER V7.08 CMD51 05/10/2005 14:34:41 PAGE 106

    ; SOURCE LINE # 199
    0035 ?C0012:
    0035 22 RET
    ; FUNCTION start_dmpg (END)

Children