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
C++ Arduino上的负整数比较_C++_Arduino_Integer - Fatal编程技术网

C++ Arduino上的负整数比较

C++ Arduino上的负整数比较,c++,arduino,integer,C++,Arduino,Integer,我遇到了一个令人沮丧的问题,找不出原因。 我在用C++来研究一个ARUDIO(UNO),并试图找出一个整数是否定的还是正的。但是: const int32_t remaining = (int32_t)item->delay.delay - chrono; serialPrintlnf("remaining=%d", remaining); serialPrintlnf("remaining>0=%d", remaining > 0); serialPrintlnf("rema

我遇到了一个令人沮丧的问题,找不出原因。 我在用C++来研究一个ARUDIO(UNO),并试图找出一个整数是否定的还是正的。但是:

const int32_t remaining = (int32_t)item->delay.delay - chrono;
serialPrintlnf("remaining=%d", remaining);
serialPrintlnf("remaining>0=%d", remaining > 0);
serialPrintlnf("remaining<0=%d", remaining < 0);
serialPrintlnf("max(remaining, 0)=%d", max(remaining, 0));
在中,我们注意到max实际上是在Arduino.h#93中实现的

因此,它也失败了也就不足为奇了。 我注意到保留为-1的硬编码可以工作,但我希望是编译器启动并完全删除比较

尝试
Serial.println(剩余,BIN)时会出现一些奇怪的情况
,它给出了
-1841
100111111100011001111
,这与16位或32位2补码表示不对应


当剩余值实际上为正值时,结果是相同的。IDE声称使用的比较运算符是
运算符我猜
int
小于32位,因此
%d
不是显示
int32\t
的正确格式。这有什么奇怪的?关于
max
宏,它失败并不奇怪?为了澄清我上面的评论,我相信为了证实@interjay的猜测,Arduino上的
int
是16位的。使用
%ld
并转换为
long
。std::cout通过设计知道正确的类型!
remaining=-1565
remaining>0=1
remaining<0=0
max(remaining, 0)=-1565
#define max(a,b) ((a)>(b)?(a):(b))