JAVA
-
Test021 ~ 024 비트 단위 연산자2020.09.01
-
음의 정수를 표현하는 방법2020.09.01
-
Test020 자바의 입출력을 활용하여 사칙연산 하기2020.09.01
-
Test019 실수형 데이터타입의 정밀도 테스트2020.09.01
-
Test018 자바의 기본 입출력 java.util.Scanner(퀴즈2)2020.09.01
-
Test017 자바의 기본 입출력 java.util.Scanner(퀴즈1)2020.09.01
Test021 ~ 024 비트 단위 연산자
1. 비트열 반전 연산자 (~)
public class Test021
{
public static void main(String[] args)
{
int a = 10, b = -10;
System.out.printf("~a : %d\n", ~a);
System.out.printf("~b : %d\n", ~b);
}
}
// 실행 결과
/*
~a : -11
~b : 9
계속하려면 아무 키나 누르십시오 . . .
*/

2. AND, OR, XOR 연산자 (&, |, ^)
public class Test022
{
public static void main(String[] args)
{
int a = 13, b = 7;
int c, d, e;
c = a & b; // 비트 AND
d = a | b; // 비트 OR
e = a ^ b; // 비트 XOR
System.out.printf("a & b : %d\n",c);
System.out.printf("a | b : %d\n",d);
System.out.printf("a ^ b : %d\n",e);
}
}
// 실행 결과
/*
a & b : 5
a | b : 15
a ^ b : 10
계속하려면 아무 키나 누르십시오 . . .
*/

3. 시프트 연산(<<, >>, <<<, >>>)
왼쪽 시프트연산을 한번 수행하면 2배가 되고 오른쪽으로 시프트연산을 한번 수행하면 1/2배가 된다.
public class Test024
{
public static void main(String[] args)
{
// |
int x = 128; // 00000000 00000000 00000000 10000000
System.out.printf("x << 3 : %d\n", x << 3); // 00000000 00000000 00000100 00000000
System.out.printf("x * 8 : %d\n", x * 8);
// |
System.out.printf("x >> 3 : %d\n", x >> 3); // 00000000 00000000 00000000 00010000
System.out.printf("x / 8 : %d\n", x / 8);
System.out.printf("x << 24 : %d\n", x << 24);
//--==>> x << 24 : -2147483648
// |
// 10000000 00000000 00000000 00000000
}
}
4. 두 수의 교환
일반적인 두 변수의 자리 바꿈은 temp와 같은 임시저장을 위한 변수를 만들어 이를 이용해 두 변수를 교환한다.
public class Test023
{
public static void main(String[] args)
{
// ○ 일반적인 두 변수(a, b)의 자리 바꿈
int a=10, b=20; //-- 내용물을 바꾸기 위한 두 정수
int temp; //-- 임시 저장 변수
// 내용물을 바꾸기 전 확인
System.out.println("a : " + a + ", b : " + b);
// 연산 및 처리(내용물 바꾸기 → 기본 대입 연산 활용)
temp = a;
a = b;
b = temp;
// 연산 처리 후 결과 확인
System.out.println("a : " + a + ", b : " + b);
}
}
이를 xor연산을 다음과 같이 수행하면 아래와 같이 간단하게 해결할 수 있다.
public class Test023
{
public static void main(String[] args)
{
// ○ 비트 단위 연산자 "XOR" 연산자를 활용하여
// 두 변수에 담겨있는 내용(값) 바꾸기
// 주요 변수 선언 및 초기화
int x = 20, y = 23;
// 각 변수에 담긴 내용물 확인
System.out.printf("x : %d, y : %d\n", x, y);
// 연산 및 처리
/*
x = x ^ y;
y = y ^ x;
x = x ^ y;
*/
y = y ^ x;
x = x ^ y;
y = y ^ x;
// 연산 처리 후 결과 확인
System.out.printf("x : %d, y : %d\n",x, y);
}
}
// 실행 결과
/*
x : 20, y : 23
x : 23, y : 20
*/
'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test026 조건 연산자(삼항 연산자) (1) (0) | 2020.09.02 |
|---|---|
| Test025 논리 연산자 (0) | 2020.09.02 |
| 음의 정수를 표현하는 방법 (0) | 2020.09.01 |
| Test020 자바의 입출력을 활용하여 사칙연산 하기 (0) | 2020.09.01 |
| Test019 실수형 데이터타입의 정밀도 테스트 (0) | 2020.09.01 |
음의 정수를 표현하는 방법
■■■음의정수표현■■■
①. -10을 byte 기반 비트열로 나타낸다.
ㄱ. 0 0001010 → 10을 byte기반으로 나타냄
ㄴ. 1 1110101 → 1의 보수를 취한다
ㄷ. 1 1110101 + 00000001 → 2의 보수를 취한다
1 1110101
0 0000001 +
--------------
11110110
ㄹ. byte 기반으로 나타낸 10과 -10을 합하여 합이 0이 맞는지 확인
1 1110110
0 0001010 +
---------------
1 0 0000000
※ 11110110
②. -27을 byte 기반 비트열로 나타낸다.
ㄱ. 0 0011011 → 27을 byte기반으로 나타냄
ㄴ. 1 1100100 → 1의 보수를 취한다
ㄷ. 1 1100100 + 0 0000001 → 2의 보수를 취한다
1 1100100
0 0000001 +
-----------------
1 1100101
ㄹ. byte 기반으로 나타낸 27과 -27을 합하여 합이 0이 맞는지 확인
0 0011011
1 1100101 +
-----------------
1 0 0000000
※ 1 1100101
③. -31을 byte 기반 비트열로 나타낸다.
ㄱ. 0 0011111
ㄴ. 1 1100000
ㄷ. 1 1100001
※ 1 1100001
④. -13을 byte 기반 비트열로 나타낸다.
ㄱ. 0 0001101
ㄴ. 1 1110010
ㄷ. 1 1110011
※ 1 1110011
⑤. byte 기반의 11001010을 10진수 정수형으로 나타낸다.
ㄱ. 2의 보수가 취해진 11001010에서 1을 뺀다.
1 1001010
0 0000001 -
-------------------
1 1001001
ㄴ. 1의 보수를 취한다.
0 0110110
ㄷ. 10진수로 변환후 -부호를 붙인다.
※ -54
⑥. byte 기반의 11110101을 10진수 정수형으로 나타낸다.
ㄱ.1 1110101 - 0 0000001 = 1 1110100
ㄴ.0 0001011
ㄷ. -11
※ -11
⑦. byte 기반의 10000001을 10진수 정수형으로 나타낸다.
ㄱ.1 0000001 - 0 0000001 = 1 0000000
ㄴ.0 1111111
ㄷ.-127
※ -127
⑧. byte 기반의 10101010을 10진수 정수형으로 나타낸다.
ㄱ. 1 0101010 - 0 0000001 = 1 0101001
ㄴ. 0 1010110
ㄷ. -86
※ -86
⑨. byte 기반의 10000101을 10진수 정수형으로 나타낸다.
ㄱ. 1 0000101 - 0 0000001 = 1 0000100
ㄴ. 0 1111011
ㄷ. -123
※ -123
⑩.byte 기반의 11111111을 10진수 정수형으로 나타낸다.
ㄱ. 1 1111111 - 0 0000001 = 1 1111110
ㄴ. 0 0000001
ㄷ. -1
※ -1
'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test025 논리 연산자 (0) | 2020.09.02 |
|---|---|
| Test021 ~ 024 비트 단위 연산자 (0) | 2020.09.01 |
| Test020 자바의 입출력을 활용하여 사칙연산 하기 (0) | 2020.09.01 |
| Test019 실수형 데이터타입의 정밀도 테스트 (0) | 2020.09.01 |
| Test018 자바의 기본 입출력 java.util.Scanner(퀴즈2) (0) | 2020.09.01 |
Test020 자바의 입출력을 활용하여 사칙연산 하기
※ 사용자로부터 임의의 정수를 두 번 입력받아 사칙연산 및 나머지 연산을 수행하여 그 결과를 출력하는 프로그램을 구현한다. 단, 입력받는 과정은 BufferedReader 를 활용할 수 있도록 하고 출력하는 과정은 printf() 메소드를 활용할 수 있도록 한다. 또한, 나눗셈 연산은 편의상 정수 기반으로 처리한다.
실행 예)
첫 번째 정수 입력 : 10
두 번째 정수 입력 : 2
=====[결과]=====
10 + 2 = 12
10 - 2 = 8
10 * 2 = 20
10 / 2 = 5
10 % 2 = 0
================
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Test020
{
public static void main(String[] args) throws IOException
{
// 주요 변수 선언
int num1, num2; //-- 사용자 입력값을 담을 변수
int res1, res2, res3, res4, res5; //-- 연산 결과를 담을 변수
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 연사 및 처리
// ① 사용자에게 안내 메세지 출력
System.out.print("첫 번째 정수 입력 : ");
// ② 사용자가 입력한 값(문자열)을 정수형태로 변환한 후 변수 num1 에 담아내기
num1 = Integer.parseInt(br.readLine());
// ③ 사용자에게 안내 메세지 출력
System.out.print("두 번째 정수 입력 : ");
// ④ 사용자가 입력한 값(문자열)을 정수형태로 변환한 후 변수 num2 에 담아내기
num2 = Integer.parseInt(br.readLine());
// ⑤ 산술 연산 수행
res1 = num1 + num2;
res2 = num1 - num2;
res3 = num1 * num2;
res4 = num1 / num2;
res5 = num1 % num2;
// 결과 출력
System.out.printf("=====[결과]=====\n");
System.out.printf("%d + %d = %d\n", num1, num2, res1);
System.out.printf("%d - %d = %d\n", num1, num2, res2);
System.out.printf("%d * %d = %d\n", num1, num2, res3);
System.out.printf("%d / %d = %d\n", num1, num2, res4);
System.out.printf("%d %% %d = %d\n", num1, num2, res5);
System.out.printf("================\n");
/*
// BufferedReader 인스턴스 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 주요 변수 선언
int num1, num2;
// 연산 및 처리
System.out.print("첫 번째 정수 입력 : ");
num1 = Integer.parseInt(br.readLine());
System.out.print("두 번째 정수 입력 : ");
num2 = Integer.parseInt(br.readLine());
// 결과 출력
System.out.println("=====[결과]=====");
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
System.out.println(num1 + " % " + num2 + " = " + (num1 % num2));
System.out.println("================");
*/
}
}
// 실행 결과
/*
첫 번째 정수 입력 : 10
두 번째 정수 입력 : 2
=====[결과]=====
10 + 2 = 12
10 - 2 = 8
10 * 2 = 20
10 / 2 = 5
10 % 2 = 0
================
계속하려면 아무 키나 누르십시오 . . .
*/'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test021 ~ 024 비트 단위 연산자 (0) | 2020.09.01 |
|---|---|
| 음의 정수를 표현하는 방법 (0) | 2020.09.01 |
| Test019 실수형 데이터타입의 정밀도 테스트 (0) | 2020.09.01 |
| Test018 자바의 기본 입출력 java.util.Scanner(퀴즈2) (0) | 2020.09.01 |
| Test017 자바의 기본 입출력 java.util.Scanner(퀴즈1) (0) | 2020.09.01 |
Test019 실수형 데이터타입의 정밀도 테스트
※ 아래는 float(4 Byte) 보다 double(8 Byte)가 더 정밀하다는 것을 보여준다
public class Test019
{
public static void main(String[] args)
{
// 주요 변수 선언
float a = 0;
double b = 0;
// 연산 및 처리 → 반복 연산 → 100000(십만)번 반복
for(int i = 1; i<=100000; i++)
{
a += 100000; // 변수 a 를 100000 만큼 증가시켜라
b += 100000; // 변수 b 를 100000 만큼 증가시켜라
}
// 결과 출력
System.out.println("float a : " + (a/100000));
System.out.println("double b : " + (b/100000));
}
}
// 실행 결과
/*
float a : 99996.055
double b : 100000.0
계속하려면 아무 키나 누르십시오 . . .
*/'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| 음의 정수를 표현하는 방법 (0) | 2020.09.01 |
|---|---|
| Test020 자바의 입출력을 활용하여 사칙연산 하기 (0) | 2020.09.01 |
| Test018 자바의 기본 입출력 java.util.Scanner(퀴즈2) (0) | 2020.09.01 |
| Test017 자바의 기본 입출력 java.util.Scanner(퀴즈1) (0) | 2020.09.01 |
| Test016 자바의 기본 입출력 java.util.Scanner (0) | 2020.09.01 |
Test018 자바의 기본 입출력 java.util.Scanner(퀴즈2)
※ Scanner클래스의 메소드인 useDelimiter를 이용하여 콤마(,) 문자를 기준으로 next메소드를 사용하여 입력받을 수 있다. 이를 활용하여 학생의 이름과 성적을 입력받는 프로그램을 구현하여라.

import java.util.Scanner;
public class Test018
{
public static void main(String[] args)
{
// Scnanner 인스턴스 생성
Scanner sc = new Scanner(System.in);
// 주요 변수 선언
String name;
int kor, eng, mat, tot;
// 연산 및 처리
System.out.print("이름,국어,영어,수학 입력(',' 구분) : ");
sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*");
// -----------
// 조윤상,90,80,70
name = sc.next(); //김승범
kor = sc.nextInt(); // 90
eng = sc.nextInt(); // 80
mat = sc.nextInt(); // 70
tot = kor + eng + mat;
// 결과 처리
System.out.println();
System.out.println(">> 이름 : " + name);
System.out.println(">> 총점 : " + tot);
}
}'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test020 자바의 입출력을 활용하여 사칙연산 하기 (0) | 2020.09.01 |
|---|---|
| Test019 실수형 데이터타입의 정밀도 테스트 (0) | 2020.09.01 |
| Test017 자바의 기본 입출력 java.util.Scanner(퀴즈1) (0) | 2020.09.01 |
| Test016 자바의 기본 입출력 java.util.Scanner (0) | 2020.09.01 |
| Test015 자바의 기본 입출력 System.out.printf() (0) | 2020.09.01 |
Test017 자바의 기본 입출력 java.util.Scanner(퀴즈1)
import java.util.Scanner;
public class Test017
{
public static void main(String[] args)
{
// Scanner 인스턴스 생성
Scanner sc = new Scanner(System.in);
// 주요 변수 선언
String name; //-- 이름
int kor, eng, mat, tot; //-- 국어, 영어, 수학, 총점
// 연산 및 처리
// ① 사용자에게 안내 메세지 출력
System.out.print("이름 국어 영어 수학 점수입력(공백구분) : ");
// 조윤상 90 80 70
// ② 사용자가 입력한 데이터를 각 변수에 담아내기
name = sc.next();
kor = sc.nextInt();
eng = sc.nextInt();
mat = sc.nextInt();
// ③ 총점 산출
tot = kor + eng + mat;
// 결과 출력
System.out.println();
System.out.println(">> 이름 : " + name);
System.out.println(">> 총점 : " + tot);
}
}
//실행 결과
/*
이름 국어 영어 수학 점수입력(공백구분) : 조윤상 90 80 70
>> 이름 : 조윤상
>> 총점 : 240
계속하려면 아무 키나 누르십시오 . . .
*/'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test019 실수형 데이터타입의 정밀도 테스트 (0) | 2020.09.01 |
|---|---|
| Test018 자바의 기본 입출력 java.util.Scanner(퀴즈2) (0) | 2020.09.01 |
| Test016 자바의 기본 입출력 java.util.Scanner (0) | 2020.09.01 |
| Test015 자바의 기본 입출력 System.out.printf() (0) | 2020.09.01 |
| Test014 자바의 입출력 System.in.read (0) | 2020.09.01 |