簡體   English   中英

是否可以將char中的位映射到短的任意位?

[英]Is it possible to map the bits in a char to arbitrary bits in a short?

我想知道是否有任何方法可以將較小變量的位任意映射到較大變量中的位。 我想我的問題將通過一個例子更容易理解。

如果我有一個16位寄存器“PORTA”,然后我有一個8位變量OPT1,我希望能夠寫

PORTA = 0x0000
OPT1 = 0xAB

並最終得到包含0x0A0B的PORTA。

這些位將自動映射,只需寫入變量OPT1即可

OPT1_bit0 => PORTA_bit0
OPT1_bit1 => PORTA_bit1
OPT1_bit2 => PORTA_bit2
OPT1_bit3 => PORTA_bit3

OPT1_bit4 => PORTA_bit8
OPT1_bit5 => PORTA_bit9
OPT1_bit6 => PORTA_bit10
OPT1_bit7 => PORTA_bit11

我不認為你可以直接映射作業,意思是:

OPT1 = 0xAB => PORTA = 0x0A0B

但是,您可以通過宏自動執行作業。 例如:

static int PORTA = 0x0000;
#define OPT1(val) (PORTA = (val&0x0F)|((val&0xF0)<<4))

所以現在當你對OPT1進行“任務”時,它每次都會為你正確地移動到PORTA:

int main(int argc, char *argv[]) 
{
  OPT1(0xAB);
  printf("PORTA's value: %#x\n", PORTA);
  return 0;
}

mike@linux-4puc:~> ./a.out 
PORTA's value: 0xa0b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM