백기선님 스터디에서 배운거 2가지 (간략히 정리)

반응형
반응형

1.<<<

가운데 값을 구할때 자바 같은 정적 타입 언어는 오버 플로우가 발생할 수 있다. 

  public void shift () {
        int max = Integer.MAX_VALUE;
        int value = 10000000;

        System.out.println((max+value)/2);
  }

이렇게 발생하는 이유는 더하기를 하게 되는 순간 오버플로우가 발생하고 그 오버플로우발생한 것들을 2로 나눈 결과이기 때문입니다.

이것을 해결하기 위해서는 2가지 방법을 사용할 수 있다.

    1) value + (max-value)/2 사용

   => 결과 1078741823

이것이 가능한 이유는 작은 숫자로 생각해 보자.

value를 4로 두고 max를 100으로 두자.. 그러면 104니까 답은 52가 된다.
이것을 위식에 대입해 보자.
4 + (100-4)/2 이렇게 답이 나온다. 지금은 완벽한 설명이 힘들것 같아 이렇게 종료한다. 결국은 답이 일치하게 되는 상황이 발생하였다.

   2) <<< 활용

이 방법이 가능한 이유는 더한뒤 그 비트를 왼쪽으로 한칸씩 옮겼기 때문이다. 그리고 양수로 만들기 위해 << 가 아닌 <<<로 작성하였다.

2. ^ 활용

백기선님이 스터디에서 1문제를 내주셨다.

어떠한 int배열이 존재하는데 단 한개만 짝이 없는 숫자라 할때 그 숫자가 무엇인지 구해라...|
[1,1,2,4,5,5,4] => 답 : 2

public int xor(int[] array) {

        int answer = 0;
        for (int value : array) {
            answer ^= value;
        }
        return answer;
    }

이것은 ^ 즉 xor를 활용한것인데

xor의 특징이 상호 배타적이라는 것이다.

결국 같으면 0이 나오고 다르면 그숫자가 나온다는 의미다. 이건 조금 더 해봐야 알 것 같지만... .ㅎㅎ;;

 

추가+) 

 문제 :

int i = 0; int j = 0;

if (i++ == 0 || j++ == 0) {

}

System.out.println(i);
System.out.println(j);

???

int i = 0; int j = 0;

if (i++ == 0 | j++ == 0) {

}

System.out.println(i);
System.out.println(j);

????

생각해볼것

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

Junit5  (0) 2020.12.04
반복문과 조건문  (0) 2020.11.29
연산자  (0) 2020.11.26
자바 데이터 타입, 변수 그리고 배열   (5) 2020.11.18
JVM이란?  (0) 2020.11.13

댓글

Designed by JB FACTORY