简单的操作。计算时间延迟。
const unsigned long C1 = 30 * 1000;
const unsigned long C2 = (300 * 1000)/C1; // must be = 10
void setup() {
Serial.begin(57600);
Serial.println("\n-------");
Serial.print("C1 = "); Serial.println(C1);
Serial.print("C2 = "); Serial.println(C2);
unsigned long V1 = (300 * 1000)/C1; // must be = 10
Serial.print("V1 = "); Serial.println(V1);
long V2 = (300 * 1000)/30000; // must be = 10
Serial.print("V2 = "); Serial.println(V2);
int V3 = (300 * 1000)/30000; // must be = 10
Serial.print("V3 = "); Serial.println(V3);
}
void loop() {
}
Arduino UNO在显示器控制台中打印:
有什么问题?
答案 0 :(得分:3)
300 * 1000 预计会以十六进制表示 30&#39; <00> 或 0x493E0 。 但是当你写(300 * 1000)时,Arduino使用 16位有符号整数算术,因此结果被截断为 0x93E0 (或 - 以十进制表示的27680。
当你除以无符号长整数时,结果将转换为无符号长整数,这会给出 0xFFFF&#39; 93E0 或 4&#39; 294&#39;&#39;&#39; 616 十进制。
除以30&000;你得 143&#39; 164 。
对于 V2 ,它是相同的:16位带符号算术中的(300 * 1000)= -27680和-27&#39; 680/30&000; 000给出 0 强>