Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 乘法,除法。怎么了?_Arduino_Arduino Uno - Fatal编程技术网

Arduino 乘法,除法。怎么了?

Arduino 乘法,除法。怎么了?,arduino,arduino-uno,Arduino,Arduino Uno,简单的操作。计算时间延迟 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 = "); Ser

简单的操作。计算时间延迟

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:

  • C1=30000(正常)
  • C2=143164(必须为=10)
  • V1=143164(必须为=10)
  • V2=0(必须为=10)
  • V3=0(必须为=10)

怎么了?

300*1000预计将以十六进制形式给出30'0000,或0x493E0。 但是当您写入(300*1000)时,Arduino使用16位有符号整数算术,因此结果被截断为0x93E0(或十进制中的-27680)

然后除以无符号长时,结果将转换为无符号长,这将以十进制形式给出0xFFFF'93E04'294'939'616

除以30000,得到143'164


对于V2,它是相同的:(300*1000)=16位有符号算术中的-27680,-27'680/30'000给出0300*1000预计给出30'0000,或十六进制中的0x493E0。 但是当您写入(300*1000)时,Arduino使用16位有符号整数算术,因此结果被截断为0x93E0(或十进制中的-27680)

然后除以无符号长时,结果将转换为无符号长,这将以十进制形式给出0xFFFF'93E04'294'939'616

除以30000,得到143'164

对于V2来说是相同的:(300*1000)=16位有符号算术中的-27680,-27'680/30'000给出0

Hack
long V2=(300*1000UL)/30000打印
10
Hack
long V2=(300*1000UL)/30000打印
10