糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 有符号数 无符号树混合计算问题。

有符号数 无符号树混合计算问题。

时间:2019-11-29 18:07:40

相关推荐

有符号数 无符号树混合计算问题。

今天在线刷题,其中一个问题总是结果跟期望的不一样,在一次次的检查程序逻辑、确认无误后,还是不能通过,不得已用VS开始调试!

这里是我的程序代码:

1 // maxDepth.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<vector> 6 #include<iostream> 7 #include<limits.h> 8 9 using namespace std;10 11 class TreeNode {12 public:13int val;14TreeNode *left, *right;15TreeNode(int val) {16this->val = val;17this->left = this->right = NULL;18}19 }; 20 21 class Solution {22 public:23/**24* @param root: The root of binary tree.25* @return: An integer26*/27void PreOrder(TreeNode *root, std::vector<TreeNode*> &path)28{29 if (!root)30 return;31 path.push_back(root);32 if(!root->left && !root->right)33 if (path.size() > max)34 max = path.size();35 if(root->left) PreOrder(root->left, path);36 if(root->right) PreOrder(root->right, path);37 path.pop_back(); 38}39int maxDepth(TreeNode *root) {40 // write your code here41 if (!root)42 return 0;43 std::vector<TreeNode*> path;44 PreOrder(root, path); 45 return max;46}47Solution():max(INT_MIN){;}48 private:49int max;50 };51 52 void Test()53 {54int c = -1;55if (c > (unsigned)1)std::cout << "c > -1" << std::endl;56c = INT_MIN;57//std::cout << c;58//std::cout << 5960std::cout << -7 + (unsigned)5 << std::endl;61std::cout << -7 + (unsigned)10 << std::endl;62 63//bool b = c > 1;64//std::cout << b ;65 66 }67 68 int _tmain(int argc, _TCHAR* argv[])69 {70TreeNode *root = new TreeNode(0);71Solution so;72std::cout << so.maxDepth(root) << std::endl;73 74Test();75 76 7778return 0;79 }

调试时发现,33行处if (path.size() > max)怎么都不会执行。如此就明白了,这里涉及到有符号、无符号数的混合运算问题!

1. int max定义的是有符号数,并且初始化为最小的负数INT_MIN,而size()函数返回的是无符号数,在混合运算中,会把有符号数转化为无符号数。负数的第一位为1,转化为无符号数之后大于所有的正数,所以这里怎么都不会执行!

2. 转化过程后运算时,可能会发生溢出,C的简单做法就是截断!如我这里的test()函数的编译信息。

3. 实际上,我在编译时,VS已经对33行发出警告“warning C4018: “>”: 有符号/无符号不匹配”,可是我却忽视了这个做法。所以,绝不要忽视编译器的任何警告。

4.实际上,在CSAPP第二章中,就对有符号、无符号数进行了深入的讨论。并且得出了“无符号数的带来的弊端远大于它所带来的作用,尽量少使用无符号数”的结论。可是C++标准库中,很多关于size(),capacity()函数返回的都是无符号数,所以处理这样的程序中,必须小心处理有符号无符号数混合运算的问题!

如果觉得《有符号数 无符号树混合计算问题。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。