单算移关与,异或逻条赋

括号级别最高,逗号级别最低,单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值。

&属于的是逻辑运算

==属于的是关系运算

=才是赋值运算

 

题目:

给定两个整数 XX 和 YY,输出在他们之间(不包括 XX 和 YY)的所有奇数的和。

输入格式

第一行输入 XX,第二行输入 YY。

输出格式

输出一个整数,表示所有满足条件的奇数的和。

数据范围

100X,Y100

 

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;
}

  

posted on 2022-09-21 16:16  浅唱\,,笑竹神易  阅读(114)  评论(0)    收藏  举报