@[Star0925](/user/990783)
运算符 `!` 的优先级比 `<=` 或者 `>=` 要高,因此您的代码实际运行结果与您的预期不一致。
by metaphysis @ 2023-06-13 10:11:00
@[metaphysis](/user/333388) 这是用来判断是否为符号呀
by Star0925 @ 2023-06-13 20:03:30
@[Star0925](/user/990783)
由于运算符优先级的关系,您这样写,无法判断是否有符号,因为 `if` 语句的结果始终为假。
```
#include<bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]) {
string s;
bool b;
while (cin >> s) {
b = true;
for(int i=0; i < s.size(); i++)
{
if(!s[i] >= '0' && !s[i] <= '9')
{
b = false;
break;
}
}
cout << s << ' ' << (b ? 1 : 0) << '\n';
}
return 0;
}
```
给定输入:
```
+1234
-1234
1234
```
输出为:
```
+1234 1
-1234 1
1234 1
```
为什么?因为 `!` 的优先级比 `<=` 以及 `>=` 都要高,对于条件 `!s[i] >= '0' && !s[i] <= '9'`,先执行非运算 `!`,显然 `!s[i]` 的值为 `0`,但是字符 `'0'` 和 `'9'` 的值不为零,因此这个判断条件永远为假,也就是说不会执行 `if` 语句里面的分支。
by metaphysis @ 2023-06-14 08:07:49
@[metaphysis](/user/333388)
感谢指导
by Star0925 @ 2023-06-15 21:17:41