백기선님 스터디에서 배운거 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
백기선님 스터디에서 배운거 2가지 (간략히 정리)  (0) 2020.11.29
연산자  (0) 2020.11.26
자바 데이터 타입, 변수 그리고 배열   (5) 2020.11.18
JVM이란?  (0) 2020.11.13

댓글(0)

Designed by JB FACTORY