如何在 Arduino 中使用“U”和“L”格式化程序?

在浏览 Arduino 代码时,您可能会遇到一些后跟U或L或两者(或小写字母u和l)的数字。这些是formatters,它们强制整数常量具有特定格式。U强制整数常量为无符号数据格式,而L强制整数常量为长数据格式。

这些格式化程序可以在定义变量时使用,也可以在公式中直接使用一些整数值。

示例

int a = 33u;

# define b 33ul

int c = a*1000L;

以上所有行都可以正常编译。当然,如果要将数据类型限制为 unsigned int(如第一个示例中的int a = 33u),人们可能想知道使用整数数据类型有什么意义。没有任何意义。它们只是传达意图(您希望 Arduino 和读者将它们视为 unsigned int 或 long)。变量的类型仍然是 int。

示例

int a = 33u;

void setup() {

   // 把你的设置代码放在这里,运行一次:

   Serial.begin(9600);

   Serial.println("Hello");

   a = a-45;

   Serial.println(a);

}

void loop() {

   // 把你的主要代码放在这里,重复运行:

}

串行监视器将打印 - 12(意味着 a 仍然是int类型; unsigned int不能取负值)。

在上面的例子之后,您可能想知道是否有任何指定U和L格式器的意义。好吧,以下示例将为您提供一个用例。

示例

void setup() {

   // 把你的设置代码放在这里,运行一次:

   Serial.begin(9600);

   Serial.println("Hello");

   int x = -3;

   if(x < 5){

      Serial.println("Statement 1 is true");

   }

   if(x < 5U){

      Serial.println("Statement 2 is true");

   }

}

void loop() {

   // 把你的主要代码放在这里,重复运行:

}

串行监视器仅打印“ Statement 1 is true ”。这是因为在第二种情况 (x < 5U) 中,通过使用 U 格式化程序,我们将算术转换为无符号算术。和 -3 的无符号等效值将大于 5。但是,如果您按如下方式重写上面的代码 -

void setup() {

   // 把你的设置代码放在这里,运行一次:

   Serial.begin(9600);

   Serial.println("Hello");

   int x = -3;

   int a = 5;

   int b = 5U;

   if(x < a){

      Serial.println("Statement 1 is true");

   }

   if(x < b){

      Serial.println("Statement 2 is true");

   }

}

void loop() {

   // 把你的主要代码放在这里,重复运行:

}

然后,打印这两个语句。这表明type取代了formatter。

以上是 如何在 Arduino 中使用“U”和“L”格式化程序? 的全部内容, 来源链接: utcz.com/z/322748.html

回到顶部