컴퓨터용 계산기로 계산 가능
10진수(Dec) : 10이 되면 자릿수 +
2진수(Bin) : 2가 되면 자릿수 +
8진수(Oct): 8이 되면 자릿수 +, 7까지 가다가 8부터 10이된다.
16진수(Hex): 9까지는 10진수와 같다가 10부터는 알파벳 사용 , 16이 되면 자릿수가 올라가서 F까지 알파벳 사용하다가 16부터는 10이 된다.

2진수
8진수
16진수
16으로 나누어서 더 이상 나누어질 수 없을 때 나머지로 나온 값들을 역순으로
주의해야할점
10부터는 A, 16부터 10이므로 16진수 = 111 이면 1B가 되고, 16진수 = 114 이면 차례로 1과 14(E)이므로 1E가 된다.
16 진수 = 37이면 그냥 37이고 1010도 그냥 1010이다

이런 방식이여서 0001은 그냥 1이니까 1010은 1010이다.
끝에서 3자리로 묶어서 8진수로 계산
끝에서 4자리로 묶어서 16진수로 계산

1의보수 = 수를 반대로
2의 보수 = 1의보수 + 1
원래 비트값의 음수전환법이 2의 보수를 통해 이루어진다는 약속

1byte = 8bit = -128 ~ 127
제일 앞에 비트는 부호비트(최상위 비트=MSB)이기 때문에 -1
최상위 비트가 1이면 음수, 0이면 양수
1000 0000 - 음수가 표현할 수 있는 최대값(-128)
0111 1111 - 양수가 표현할 수 있는 최값(~127)
-2^n-1~ 2^n-1
정수 저장 공식
n= bit, 1을 빼는 이유는 MSB때문
IEEE 754 나중에 봐보기 실수 저장법

2^7, 2^6, 2^5, 2^4. 2^3, 2^2, 2^1, 2^0
128 64 32 16 8 4 2 1
기본형, 참조형으로 나뉜다.


Q.임의의 수를 소수인지 아닌지 출력하기
+ 소수 정의(prime number) : 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
Random ra = new Random();
int num = 1, ran = 0;
ran = ra.nextInt(100) + 1;
System.out.println("숫자를 입력하시오.");
num = sc.nextInt();
if(num / num != 0 && num > 1){
System.out.println("입력하신 숫자는 소수입니다.");
}else {
System.out.println("입력하신 숫자는 소수가 아닙니다.");
}
}
while을 이용해서 반복문을 만들어 if문으로 num이 1보다 크고 자기 자신으로만 나누어지게 하려했는데 실패..
random은 굳이 안써도 되는 식이였음
만약 4를 5를 입력한다면 1과 5를 제외한 2,3,4를 비교하는 것이여서 for 문을 이용했어야했는데 그냥 if 문만 생각함
boolean 이용해서 참일때 소수 거짓일때 소수아님 이런식으로도 생각할 수 있었다..
if (num <= 1){
System.out.println("소수 아님");
}else{
for(i = 2; i <= num; i++){
if(num % i == 0) break; //중괄호 치면 x, num 과 i가 나누어지는 수는 1과 본인이기때문에 나머지가 0이면 나누어 떨어지는 수가 있다는 말이 된다.
//그래서 나머지가 나오고 그 수가 num == i이면 소수가 되는것이다.
}if(num == i){ //반복문을 끝까지 돌았는데도 나누어 떨어지는 숫자가 없다.
System.out.println(num + "은 소수");
}else{
System.out.println(num + "은 소수 아님");
자주 사용하는 방식
import java.util.Scanner;
class Minority{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
int i = 0, num = 0, ran = 0;
boolean flag = true;
System.out.println("숫자를 입력하시오.");
num = sc.nextInt();
if (num <= 1){
System.out.println("소수 아님");
}//else 굳이 안써도 됌
for(i = 2; i < num; i++){ //사용자가 입력한 값과 비교하는 문장 생성
if(num % i == 0){
flag = false;
break;
}
}if(flag){
System.out.println(num + " 소수");
}else{
System.out.println(num + " 소수 아님");
}
}
}
* : flag에 true값이 들어있다가 num과 i의 나머지가 0이 되면 flag값이 false로 변경되면서 break > 그 다음 if 문으로 넘어가서 flag가 true값이면 소수고 false값이면 소수가 아님을 출력하게 하는 알고리즘
Q. 1~100사이의 소수를 출력하시오
class Minority1{
public static void main(String[]args){
int i = 0, num = 0 ; // i 가 비교값, num이 소수
for(num = 2; num <= 100; num++){
for(i = 2; i < num; i++){
if(num% i == 0) break;
}if (num == i) System.out.println(num);
}
}
}
왜 num과 i가 1이면 출력이 틀린지 물어보기
Q1. 구구단 2단 출력하시오.
class Test{
public static void main(String[]args){
int i = 2, j = 1;
for(j = 1; j <= 9; j++){
System.out.println(i + " * " + j + " = " + i*j);
}
System.out.println("------------");
}
}

Q2. 구구단 2~9단 문단 나누어서 출력하시오.
class Test2{
public static void main(String[]args){
int i = 0, j = 0, cnt = 1;
for(i = 2; i <= 9; i++){
cnt ++;
System.out.println(cnt + "단");
for(j = 2; j <= 9; j++){
System.out.println(i + " * " + j + " = " + i*j);
}
System.out.println();
}
}
}

Q3. 구구단 2단 3단 4단 5단 이렇게 가로로 출력하시오.
class Test3{
public static void main(String[]args){
int i = 2, j = 1;
for(i = 1; i <= 9; i++){ //곱해지는수
for(j = 2; j <= 9; j++){ //단
System.out.print(j + " * " + i + " = " + i*j + "\t");
}
System.out.println();
}
}
}
내가 틀린 이유
곱해지는 수와 단의 위치를 반대로 놔서.. > j 와 i의 순서
컴퓨터는 왼 > 오, 위 > 아래, j를 처음 for 문에 놓으면 2단이 세로로 출력되는게 아니라 가로로 출력된다.. 나의 패

Q4. 구구단 2단 2개, 4단 4개, 6단 6개, 8단 8개의 곱을 출력하시오.
class Test4{
public static void main(String[]args){
int i = 0, j = 0;
for(i = 2; i <= 9; i += 2){ //단
for(j = 1; j < 9; j++){ //곱해지는 수
//for(j = 1; j <= i; j++) 이렇게도 표현 가능 굳이 if안쓰고
if(i >= j){
System.out.print(i + " * " + j + " = " + i*j + " ");
}
System.out.println();
}
}
}
}
Q5. AB + BA = 99 형식이 되게하시오.
class Test5{
public static void main(String[]args){
int i = 0, j = 0;
for(i = 0; i <= 9; i++){
for(j = 0; j <= 9; j++){
//i 가 10의 자리, j가 10의자리
if((i * 10 + j) + (j*10+i) == 99){
System.out.println(i + " " + j + " + " + j + " " + i + " = 99 ");
}
}
}
}
}

Q6. 12345 이런식으로 1씩 더해져 5 x 5 가 되게 출력하시오.
678910
class Test6{
public static void main(String[]args){
int i = 0, j = 0;
int num = 1;
for(i = 0; i < 5; i++){ //행
for(j = 0; j< 5; j++){ //- 열 1씩 늘어나는 수가 5번 진행된 후 줄바꿈 하도록
System.out.print(num + " "); //num++ + " " 형식으로 사용 가능
num++;
}
System.out.println();
}
}
}

Q7. 28 부터 -1 씩해 3x3형식으로 출력되게 하시오.
class Test7{
public static void main(String[]args){
int i = 0, j = 0;
int num = 28;
for(i = 0; i < 3; i++){
for(j = 0; j< 3; j++){
System.out.print(num + " "); //num-- + " " 이렇게 표현 가능
num --;
}
System.out.println();
}
}
}

Q8. 삼각형을 만드시오.
class Test8{
public static void main(String[]args){
int i = 0, j = 0;
for(i = 1; i <= 5; i++){ //행
for(j = 1; j <= i; j++){ //열 > i보다 작거나 같게
System.out.print("*");
}
System.out.println(" ");
}
}
}
Q9. 뒤집어진 정삼각형 만드시오.
class Test9{
public static void main(String[]args){
int i = 0, j = 0;
for(i = 0; i < 4; i++){ //행
for(j = 0; j < i; j++){ // 열 8번문제에서 만든 삼각형을 공백으로 찍어주면 된다.
System.out.print(" ");
}for( ; j < 7- i; j++){ // 별만드는 행
System.out.print("*");
}
System.out.println();
}
}
}
for문의 초기값은 비워 놓기 가능, 위에서 초기화한 값이 내려온다
실패한 이유
양쪽에 공백을 만들어야된다고 생각해서 for문을 세개를 만들려고 했음 > 왼쪽 공백만 신경써서 별 개수만 신경써주면 된다.
for문을 이용한 행과 열의 이해를 제대로 못했음.