c - #define FOO 1u 2u 4u ... 1u 和 2u 是什么意思?

标签 c typedef

我正在使用 HCS12 MCU,这是库的一部分。我只是想知道什么
1U, 2U, 4U, 8U... 在这段代码中的意思。我还在学习如何使用类,请尽量通俗易懂地解释一下。

我猜:
这是否只是意味着哪个位设置为高?
1U = 00000001
2U = 00000010
...

这会叫什么?

谢谢

    typedef union {
  byte Byte;
  struct {
    byte             :1; 
    byte ADR1        :1;                                       /* Slave Address Bit 1 */
    byte ADR2        :1;                                       /* Slave Address Bit 2 */
    byte ADR3        :1;                                       /* Slave Address Bit 3 */
    byte ADR4        :1;                                       /* Slave Address Bit 4 */
    byte ADR5        :1;                                       /* Slave Address Bit 5 */
    byte ADR6        :1;                                       /* Slave Address Bit 6 */
    byte ADR7        :1;                                       /* Slave Address Bit 7 */
  } Bits;
  struct {
    byte         :1;
    byte grpADR_1 :7;
  } MergedBits;
} IBADSTR;
extern volatile IBADSTR _IBAD @(REG_BASE + 0x000000E0UL);
#define IBAD                            _IBAD.Byte
#define IBAD_ADR1                       _IBAD.Bits.ADR1
#define IBAD_ADR2                       _IBAD.Bits.ADR2
#define IBAD_ADR3                       _IBAD.Bits.ADR3
#define IBAD_ADR4                       _IBAD.Bits.ADR4
#define IBAD_ADR5                       _IBAD.Bits.ADR5
#define IBAD_ADR6                       _IBAD.Bits.ADR6
#define IBAD_ADR7                       _IBAD.Bits.ADR7
#define IBAD_ADR_1                      _IBAD.MergedBits.grpADR_1
#define IBAD_ADR                        IBAD_ADR_1

#define IBAD_ADR1_MASK                  2U
#define IBAD_ADR2_MASK                  4U
#define IBAD_ADR3_MASK                  8U
#define IBAD_ADR4_MASK                  16U
#define IBAD_ADR5_MASK                  32U
#define IBAD_ADR6_MASK                  64U
#define IBAD_ADR7_MASK                  128U
#define IBAD_ADR_1_MASK                 254U
#define IBAD_ADR_1_BITNUM               1U

最佳答案

它定义了一个无符号整数 literal .您还可以看到他们在哪里将十六进制文字定义为 unsigned long integer通过使用 0x...UL .

如果您想知道它们产生的位模式,只需将十进制文字转换为其等效的十六进制或二进制文字。 1U变成 0x01U01b 1 分别为十六进制和二进制。

另一个更常见的文字使用 f -suffix,即单精度浮点字面量,如 1.0f .

1. 仅作说明,并非符合标准的实际文字

关于c - #define FOO 1u 2u 4u ... 1u 和 2u 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844119/

相关文章:

使用然后删除 typedef 语句后 C 链表不再工作

c++ - 如何在 typedef 中查找新类型

c - 指针和typedef结构,在C中调用函数时该怎么做

c - 使用 Minizip 查找未压缩的数据

Python 嵌入 C++ try_rich_compare 类型错误

c - 使用互斥锁进行 Pthread 同步

c - typedef 一个位域变量

c - GtkCell渲染器文本 : "editable-set" set to FALSE does not deactivate editability?

c - 如何将整数数组作为参数传递给函数并修改内容?

c++ - 为什么我在间接使用基类 typedef 时总是出现语法错误,而直接使用它没问题?