单算移关与,异或逻条赋
括号级别最高,逗号级别最低,单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值。
&属于的是逻辑运算
==属于的是关系运算
=才是赋值运算
题目:
给定两个整数 XX 和 YY,输出在他们之间(不包括 XX 和 YY)的所有奇数的和。
输入格式
第一行输入 XX,第二行输入 YY。
输出格式
输出一个整数,表示所有满足条件的奇数的和。
数据范围
−100≤X,Y≤100
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner se=new Scanner(System.in);
int a=se.nextInt(),b=se.nextInt();
if(a>b){
int x=a;
a=b;
b=x;
}
long sum=0;
for(int i=a+1;i<b;i++)
if((Math.abs(i)&1)==1)sum+=i;
System.out.println(sum);
}
}
如果不加括号
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner se=new Scanner(System.in);
int a=se.nextInt(),b=se.nextInt();
if(a>b){
int x=a;
a=b;
b=x;
}
long sum=0;
for(int i=a+1;i<b;i++)
if(Math.abs(i)&1==1)sum+=i;
System.out.println(sum);
}
}
会报错:
Main.java:14: error: bad operand types for binary operator '&'
if(Math.abs(i)&1==1)sum+=i;
^
first type: int
second type: boolean
1 error
Math.abs(i)&1==1因为会先进行1==1,逻辑运算返回的boolen,然而&要求的是两边必须是int类型,然而java为了安全,boolen和int类型,彼此之间按不会存在隐式转换
而c++存在隐式转换
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
int x=3;
if(3&3==1) cout<<111<<endl;
return 0;
}
浙公网安备 33010602011771号