如何在 Arduino 中使用“U”和“L”格式化程序?
在浏览Arduino代码时,您可能会遇到一些后跟U或L或两者(或小写字母u和l)的数字。这些是formatters,它们强制整数常量具有特定格式。U强制整数常量为无符号数据格式,而L强制整数常量为长数据格式。
这些格式化程序可以在定义变量时使用,也可以在公式中直接使用一些整数值。
示例
int a = 33u; # define b 33ul int c = a*1000L;
以上所有行都可以正常编译。当然,如果要将数据类型限制为unsignedint(如第一个示例中的inta=33u),人们可能想知道使用整数数据类型有什么意义。没有任何意义。它们只是传达意图(您希望Arduino和读者将它们视为unsignedint或long)。变量的类型仍然是int。
示例
int a = 33u;
void setup() {
//把你的设置代码放在这里,运行一次:
Serial.begin(9600);
Serial.println("Hello");
a = a-45;
Serial.println(a);
}
void loop() {
//把你的主要代码放在这里,重复运行:
}串行监视器将打印-12(意味着a仍然是int类型;unsignedint不能取负值)。
在上面的例子之后,您可能想知道是否有任何指定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() {
//把你的主要代码放在这里,重复运行:
}串行监视器仅打印“Statement1istrue”。这是因为在第二种情况(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。