public class OperatorEx5 {
public static void main(String args[]){
int a=10;
int b=4;
System.out.printf("%d + %d = %d%n",a,b,a+b);
System.out.printf("%d - %d = %d%n",a,b,a-b);
System.out.printf("%d * %d = %d%n",a,b,a*b);
System.out.printf("%d / %d = %d%n",a,b,a/b);
System.out.printf("%d / %f = %f%n",a,(float)b,a/(float)b);
}
}
int타입은 소수점을 저장하지 못하므로 정수만 남고, 반올림이 발생하지 않는다
public class OperatorEx6 {
public static void main(String[] args){
byte a=10;
byte b=20;
byte c=(byte)(a+b);//byte로 형변환
System.out.println(c);
}
}
byte+byte 덧셈은 int로 형변환 후 처리되기 때문에 byte형으로 형변환을 해줘야지 오류가 안 발생한다
public class OperatorEx8 {
public static void main(String[] args){
int a=1_000_000;
int b=2_000_000;
long c=a*b;
System.out.println(c);//-1454759936
}
}
int*int는 int형이므로 연산결과는 int타입이다. 그래서 long형으로 변환하여도 값이 오류가 나온다.
public class OperatorEx9 {
public static void main(String[] args){
long a= 1_000_000*1_000_000;
long b= 1_000_000*1_000_000L;
System.out.println("a="+a);//-727379968
System.out.println("b="+b);//1000000000000;
}
}
a는 long형이여도 int형과 int형의 연산결과가 int형이므로 오류가 나왔고 b는 long형으로 자동형변환해서 계산하므로 원하는 결과값이 나왔다
public class OperatorEx10 {
public static void main(String[] args){
int a= 1000000;
int result1= a*a/a;
int result2= a/a*a;
System.out.printf("%d * %d / %d = %d%n",a,a,a,result1);//-727
System.out.printf("%d / %d * %d = %d%n",a,a,a,result2);//1000000
}
}
같은 연산이여도 연산순서에 따라 결과값이 바뀐다
public class OperatorEx11 {
public static void main(String[] args){
char a='a';
char d='d';
char zero='0';
char two='2';
System.out.printf("'%c' - '%c' =%d%n",d,a,d-a);
System.out.printf("'%c' - '%c' =%d%n",two,zero,two-zero);
System.out.printf("'%c'=%d%n",a,(int)a);
System.out.printf("'%c'=%d%n",d,(int)d);
System.out.printf("'%c'=%d%n",zero,(int)zero);
System.out.printf("'%c'=%d%n",two,(int)two);
}
}
문자로도 사칙연산이 가능하다
public class OperatorEx12 {
public static void main(String[] args){
char c1= 'a';
char c2= c1;
char c3=' ';
int i=c1+1;
c3=(char)(c1+1);
c2++;
c2++;
System.out.println("i="+i);//i=98
System.out.println("c2="+c2);//c2=c
System.out.println("c3="+c3);//c3=b
}
}
유니코드로 저장되므로 1을 올리면 다른 문자로 바뀌게 된다
public class OperatorEx15 {
public static void main(String[] args){
char lowerCase='a';
char upperCase=(char)(lowerCase-32);
System.out.println(upperCase);//A
}
}
소문자에서 대문자의 코드값 차이는 10진수로 32이므로 사칙연산을 통해 대문자로 바뀌는 것을 알 수 있다
나머지 연산자는 모듈러 연산자라고도 부른다
나머지 연산자는 짝수, 홀수 또는 배수 검사 등에 주로 사용된다
public class OperatorEx19 {
public static void main(String args[]){
int x=10;
int y=8;
System.out.printf("%d을 %d로 나누면, %n",x,y);//10,8
System.out.printf("몫은 %d이고, 나머지는 %d입니다. %n",x/y,x%y);//1,2
}
}
public class OperatorEx20 {
public static void main(String[] args){
System.out.println(-10%8);//-2
System.out.println(10%-8);//2
System.out.println(-10%-8);//2
}
}
나머지 연산자(%)는 나누는 수로 음수도 허용한다. 그러나 부호는 무시된다.