연산문
연산문이란 프로그램 언어에서 프로그램의 단위가 되는 문의 종류의 하나이다. 연산문은 사칙연산이나 지수의 연산 실행을 지정하는 명령문이다.[1]
개요
연산문은 자료(data)와 연산자(operator)로 구성된다. 이때 자료는 변수 또는 상수이다. 이 둘을 조합하고 프로그램으로 작성한 프로그래밍을 연산문이라고 하며, 연산자와 같이 여러 종류의 연산문으로 구성되어 있다.
종류
연산문에는 여러 종류가 있지만 산술, 관계, 논리, 비트, 기타 등의 연산자와 변수들을 이용한 연산문이 대표적이다.
산술
산술 연산문은 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 등의 연산을 할 때 사용되는 연산자로 단항, 이항, 대입으로 나타낸 문장이다. 계산식과 결과 값은 다음과 같다.[2]
이항
덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 작성한 연산문이다.
- C언어
int num01 = 10; int num02 = 4; printf("+ 연산자에 의한 결괏값은 %d입니다.\n", num01 + num02); printf("- 연산자에 의한 결괏값은 %d입니다.\n", num01 - num02); printf("* 연산자에 의한 결괏값은 %d입니다.\n", num01 * num02); printf("/ 연산자에 의한 결괏값은 %d입니다.\n", num01 / num02); printf("% 연산자에 의한 결괏값은 %d입니다.\n", num01 % num02); + 연산자에 의한 결괏값은 14입니다. - 연산자에 의한 결괏값은 6입니다. * 연산자에 의한 결괏값은 40입니다. / 연산자에 의한 결괏값은 2입니다. % 연산자에 의한 결괏값은 2입니다. [3]
- 자바
public class Error { public static void main(String args[]) { byte a = 10; byte b = 20; //byte c = a + b; 일경우 a, b 모두 int 형으로 변환 되어 연산 되기 때문에 에러 발생. byte c = (byte)(a + b); // 형변환을 통해 byte 데이터 타입으로 바꿔주고 계산해야 한다. System.out.println(c); } } 실행 결과 : 30[4]
단항
대표 단항식은 증감식이며 피연산자를 1씩 증가 혹은 1씩 감소시킬 때 사용하는 연산이다. 형식은 다음과 같다.
- C언어 증감식
#include <stdio.h> int main() { int num1 = 2; int num2 = 2; int num3; int num4; num3 = num1++; // num1의 값을 num3에 할당한 뒤 num1의 값을 1 증가시킴 num4 = num2--; // num2의 값을 num4에 할당한 뒤 num2의 값을 1 감소시킴 printf("%d %d\n", num3, num4); // 2 2 return 0; } 실행 결과 : 2 2[5]
- 자바 증감식
public class Operator { public static void main(String[] args) { //증감 연산자의 독립 사용이 아닐 때 int i = 1, j = 0; j = i++; // 연산 과정 : 1] j = i를 실행, 2] i를 1 증가 System.out.printf("j = i++의 결과 : i=%d, j=%d%n",i,j); i = 1; j = 0; j = ++i; // 연산 과정 : 1] i를 1증가, 2] j = i를 실행 System.out.printf("j = ++i의 결과 : i=%d, j=%d%n",i,j); i = 1; j = 0; j = i--; // 연산 과정 : 1] j = i를 실행, 2] i를 1 감소 System.out.printf("j = i--의 결과 : i=%d, j=%d%n",i,j); i = 1; j = 0; j = --i; // 연산 과정 : 1] i를 1감소, 2] j = i를 실행 System.out.printf("j = --i의 결과 : i=%d, j=%d%n",i,j); }//main }//class j = i++의 결과 : i=2, j=1 j = ++i의 결과 : i=2, j=2 j = i--의 결과 : i=0, j=1 j = --i의 결과 : i=0, j=0[6]
대입
'='는 오른쪽 계산식의 결과나 값을 왼쪽의 변수에 대입하라는 의미로 사용되며 다음과 같이 사용한다.
- C언어 예시
#incoude <stdio.h> main () { int a = 3; a = a + 3; a = a – 3; // =, +, – a = a * 3; a = a / 3; a = a % 3; // *, /, % printf ( '% d \ n', a); } 실행 결과 : 0[7]
- 자바 예시
package sec01_exam; public class AsOpEx { public static void main(String[] args) { int result = 0; // 복합 대입 연산자는 값을 누적시킬때 많이 사용된다. result += 10; System.out.println("result = " + result); // result 에 10을 더한다. // reuslt = result + 10; 이랑 같다 result -= 5; System.out.println("result = " + result ); result *= 3; System.out.println("result = " + result ); result /= 5; System.out.println("result = " + result ); result %= 3; System.out.println("result = " + result ); } } 실행 결과 : result = 10 result = 5 result = 15 result = 3 result = 0[8]
관계
두 식의 대소 크기를 비교하는 연산자로서 연산 결과가 참(true)이나 거짓(false)으로 표현한다.[2]
- C언어 예제
#include <stdio.h> int main() { int a = 6; int b = 4; printf("%d \n",a < b); //a 가 b 보다 작은가 printf("%d \n",a <= b);//a 가 b 보다 작거나 같은가 printf("%d \n",a > b); //a 가 b 보다 큰가 printf("%d \n",a >= b);//a 가 b 보다 크거나 같은가 printf("%d \n",a == b);//a 와 b 가 같은가 printf("%d \n",a != b);//a 와 b 가 다른가 return 0; } 실행 결과 : 0 0 1 1 0 1[9]
- 자바 예시
package sec01_exam; public class CompareOpEx { public static void main(String[] args) { int num1 = 10; int num2 = 10; boolean result1 = (num1 == num2); //true boolean result2 = (num1 != num2); // false boolean result3 = (num1 <= num2); // true System.out.println(result1); System.out.println(result2); System.out.println(result3); } } 실행 결과 : true false true[10]
논리
논리 연산문은 논리합(OR), 논리곱(AND), 논리 부정(NOT) 등의 연산을 할 때 사용하는 연산자를 사용한 연산문으로 다음과 같이 사용한다.[2]
- C언어 예시
#include <stdio.h> int main() { int num1 = 20; int num2 = 10; int num3 = 30; int num4 = 15; printf("%d\n", num1 > num2 && num3 > num4); // 1: 양쪽 모두 참이므로 참 printf("%d\n", num1 > num2 && num3 < num4); // 0: 앞만 참이므로 거짓 printf("%d\n", num1 > num2 || num3 < num4); // 1: 앞만 참이므로 참 printf("%d\n", num1 < num2 || num3 < num4); // 0: 양쪽 모두 거짓이므로 거짓 printf("%d\n", !(num1 > num2)); // 0: 참의 NOT은 거짓 return 0; } 실행 결과 : 1 0 1 0 0[11]
- 자바 예제
public class LogicalOpTest { public static void main(String[] args) { // TODO Auto-generated method stub String str = "Y"; if ( str == "Y" || str == "y" ) { // 참 또는 거짓 = 참 System.out.println("str 은 Y 이거나 y 입니다."); } String str2 = "n"; if ( str == "A" || str2 == "n" ) { // 거짓 또는 참 = 참 System.out.println("str 은 A 이거나 Str2는 n 입니다."); } String str3 = "T"; if ( str3 == "T" && str3 == "t" ) { // 참 그리고 거짓 = 거짓 System.out.println("str3 은 T 이며 t 입니다."); } String str4 = "Q"; String str5 = "q"; if ( str4 == "Q" && str5 == "q" ) { // 참 그리고 참 = 참 System.out.println("str4 는 Q 이고, str5 는 q 입니다."); } } } 실행 결과 : str 은 Y 이거나 y 입니다. str2 는 N 이거나 n 입니다. str4 는 Q 이고 str5는 q 입니다.[12]
비트
비트 연산문은 비트 단위로 논리 연산을 수행하는 연산자들을 이용한 연산문이다.[2]
- C언어 예시
#include <stdio.h> int main() { unsigned char flag = 0; flag |= 1; // 0000 0001 마스크와 비트 OR로 여덟 번째 비트를 켬 flag |= 2; // 0000 0010 마스크와 비트 OR로 일곱 번째 비트를 켬 flag |= 4; // 0000 0100 마스크와 비트 OR로 여섯 번째 비트를 켬 printf("%u\n", flag); // 7: 0000 0111 if (flag & 1) // & 연산자로 0000 0001 비트가 켜져 있는지 확인 printf("0000 0001은 켜져 있음\n"); else printf("0000 0001은 꺼져 있음\n"); if (flag & 2) // & 연산자로 0000 0010 비트가 켜져 있는지 확인 printf("0000 0010은 켜져 있음\n"); else printf("0000 0010은 꺼져 있음\n"); if (flag & 4) // & 연산자로 0000 0100 비트가 켜져 있는지 확인 printf("0000 0100은 켜져 있음\n"); else printf("0000 0100은 꺼져 있음\n"); return 0; } 실행 결과 : 7 0000 0001은 켜져 있음 0000 0010은 켜져 있음 0000 0100은 켜져 있음[13]
- 자바 예제
public class bit { public static void main(String[] args) { int a = 9; int b = 11; System.out.println(Integer.toBinaryString(a)); //바이너리로 변환 System.out.println(Integer.toBinaryString(b)); //바이너리로 변환 System.out.println("10진수 : " + (a & b)); System.out.println("2진수 : " + Integer.toBinaryString(a & b)); } } 실행 결과 : 1001 1011 10진수 : 9 2진수 : 1001[14]
각주
- ↑ 〈연산문〉, 《네이버 지식백과》
- ↑ 2.0 2.1 2.2 2.3 홍수열, 〈연산자(operator)〉, 《동주대학》,
- ↑ 〈산술 연산자〉, 《티시피스쿨》
- ↑ 너구리해적단, 〈자바(Java)의 기초 박살내기 - 연산자(Operator)〉, 《티스토리》, 2017-06-30
- ↑ 〈증감 연산자의 위치에 따른 차이점 알아보기〉, 《코딩도장》
- ↑ 냉유's Log, 〈(Java 16) 증감 연산자, 조건 연산자〉, 《티스토리》, 2017-11-26
- ↑ life knowledge, 〈연산자(대입, 산술)〉, 《오픈튜토리얼스》, 2019-01-22
- ↑ 뇌 채우기 공간, 〈(자바JAVA) 연산자 - 복합대입연산자〉, 《티스토리》, 2020-09-16
- ↑ 나노콛, 〈C언어 관계 연산자 / 논리 연산자 / 대입 연산자〉, 《티스토리》, 2019-07- 18
- ↑ 뇌 채우기 공간, 〈(자바JAVA) 연산자 - 자바 관계 연산자〉, 《티스토리》, 2020-09-17
- ↑ 〈조건식과 논리 연산자 사용하기〉, 《코딩도장》
- ↑ omputer Language/JAVA, 〈(JAVA) 자바 논리 연산자를 사용하여 IF문 OR, AND 조건 사용하기〉, 《티스토리》, 2020-11-01
- ↑ 〈비트 연산자로 플래그 처리하기〉, 《코딩도장》
- ↑ ikhub vmpo, 〈(알고리즘) java 비트연산 정리하기〉, 《티스토리》, 2020-03-21
참고자료
- 〈연산문〉, 《네이버 지식백과》
- 〈산술 연산자〉, 《티시피스쿨》
- 너구리해적단, 〈자바(Java)의 기초 박살내기 - 연산자(Operator)〉, 《티스토리》, 2017-06-30
- 〈증감 연산자의 위치에 따른 차이점 알아보기〉, 《코딩도장》
- 냉유's Log, 〈(Java 16) 증감 연산자, 조건 연산자〉, 《티스토리》, 2017-11-26
- life knowledge, 〈연산자(대입, 산술)〉, 《오픈튜토리얼스》, 2019-01-22
- 뇌 채우기 공간, 〈(자바JAVA) 연산자 - 복합대입연산자〉, 《티스토리》, 2020-09-16
- 홍수열, 〈연산자(operator)〉, 《동주대학》
- 뇌 채우기 공간, 〈(자바JAVA) 연산자 - 자바 관계 연산자〉, 《티스토리》, 2020-09-17
- 〈비트 연산자로 플래그 처리하기〉, 《코딩도장》
- ikhub vmpo, 〈(알고리즘) java 비트연산 정리하기〉, 《티스토리》, 2020-03-21
같이 보기