시프트연산자 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
3번째 줄: 3번째 줄:
  
 
== 개요 ==
 
== 개요 ==
:{|class=wikitable width=700 style="background-color:#ffffee"
+
비트 값을 주어진 숫자만큼 부호 방향으로 이동시키는 연산자이다.  
|+시프트 연산자
+
부호로는 '>>, <<, >>>'가 있다.
!align=center style="background-color:#ffeecc"|연산자
+
그 중 '>>>'는 자바에만 있는 연산자로 부호에 상관없이 비트 값들을 주어진 비트 수 만큼 오른쪽으로 이동시킨 후 빈 공간을 모두 0으로 채운다.
!align=center style="background-color:#ffeecc"|설  명
 
|-
 
|align=center|>>
 
|align=center|비트값을 주어진 숫자만큼 오른쪽으로 이동시킨다.
 
|-
 
|align=center|<<
 
|align=center|비트 값을 주어진 숫자만큼 왼쪽으로 이동시킨다.
 
|-
 
|align=center|>>>
 
|align=center|비트 값을 주어진 숫자 만큼 오른쪽으로 이동 시킨 후 빈공간을 모두 0으로 채운다.
 
|}
 
 
 
시프트연산자는 비트 값을 주어진 숫자만큼 부호 방향으로 이동시키는 연산자이다. 부호로는 '>>, <<, >>>'가 있다. 그 중 '>>>'는 자바에만 있는 연산자로 부호에 상관없이 비트 값들을 주어진 비트 수 만큼 오른쪽으로 이동시킨 후 빈 공간을 모두 0으로 채운다.
 
 
 
 
[[파일:시프트 예시.png|250픽셀|섬네일|가운데|시프트 연산자 예시]]
 
[[파일:시프트 예시.png|250픽셀|섬네일|가운데|시프트 연산자 예시]]
  
27번째 줄: 13번째 줄:
 
<ref>〈[https://codedragon.tistory.com/584 시프트 연산자 특징]〉, 《시프트 연산자-시프트 연산자 종류, 비트연산의 특징》</ref>
 
<ref>〈[https://codedragon.tistory.com/584 시프트 연산자 특징]〉, 《시프트 연산자-시프트 연산자 종류, 비트연산의 특징》</ref>
 
예시를 들자면 '10 << 1'라는 연산을 보면 10진수 정수인 10을 2진수로 바꾸어 왼쪽으로 2비트 움직이라는 말이다. 10진수를 2진수로 변환하면 '0000 1010'이다.
 
예시를 들자면 '10 << 1'라는 연산을 보면 10진수 정수인 10을 2진수로 바꾸어 왼쪽으로 2비트 움직이라는 말이다. 10진수를 2진수로 변환하면 '0000 1010'이다.
여기서 왼쪽으로 1비트 움직이면 '0001 0100'이되며, 다시 10진수로 변환하면 20이 되는 것을 알 수 있다. 여기에서 시프트 연산자의 계산 공식을 알 수 있게 된다. 10에서 20이 되는 걸 살펴보면 '10 * 2'라는 것을 알 수 있다. 여기서 2는 2^1라는 것을 유추할 수 있다. 즉 'x << n'은 'x * 2^n'이라는 공식이 성립하는 것을 알 수 있다.<ref>〈[https://colossus-java-practice.tistory.com/19 시프트 연산자 계산공식]〉, 2019-05-20《비트 연산자-시프트 연산자》</ref>
+
여기서 왼쪽으로 1비트 움직이면 '0001 0100'이되며, 다시 10진수로 변환하면 20이 되는 것을 알 수 있다. 여기에서 시프트 연산자의 계산 공식을 알 수 있게 된다. 10에서 20이 되는 걸 살펴보면 '10 * 2'라는 것을 알 수 있다. 여기서 4는 2^1라는 것을 유추할 수 있다. 즉 'x << n'은 'x * 2^n'이라는 공식이 성립하는 것을 알 수 있다.
 
+
<ref>〈[https://colossus-java-practice.tistory.com/19 시프트 연산자 계산공식]〉, 2019-05-20《비트 연산자-시프트 연산자》</ref>
  x << n = x * 2^n
+
  x << n = x * 2^n  
  
 
===주의사항===
 
===주의사항===
시프트 연산자 중 '>>>'에는 몇가지 주의점이 있다. 첫째, 연산 가능한 타입이 byte, short, int, long 타입과 char타입이 있는데 int보다 작은 비트 타입인 byte, short, char는 int로 변환되어 Shift가 된다. 그렇기 때문에 결과값을 int로 받지 않고 기존의 타입 그대로 받으면 문제가 발생하게 된다.
+
시프트 연산자 중 '>>>'에는 몇가지 주의점이 있다. 첫째, 연산 가능한 타입이 byte, short, int, long 타입과 char타입이 있는데 int보다 작은 비트 타입인 byte, short, char는 int로 변환되어 Shiff가 된다. 그렇기 때문에 결과값을 int로 받지 않고 기존의 타입 그대로 받으면 문제가 발생하게 된다.
 
아래 문제발생 예시를 보면 -1 값을 가지는 byte 변수네 >>> 연산을 했는데 음수가 나오게 된다.
 
아래 문제발생 예시를 보면 -1 값을 가지는 byte 변수네 >>> 연산을 했는데 음수가 나오게 된다.
 
<ref name="연산자 주의사항">〈[https://secretroute.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%9D%98%E7%A5%9E-Vol1-%EB%B9%84%ED%8A%B8-%EC%8B%9C%ED%94%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90 연산자 주의사항]〉, 《자바의신 Vol.1 : 비트 시프트 연산자》, 2014-05-26</ref>
 
<ref name="연산자 주의사항">〈[https://secretroute.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%9D%98%E7%A5%9E-Vol1-%EB%B9%84%ED%8A%B8-%EC%8B%9C%ED%94%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90 연산자 주의사항]〉, 《자바의신 Vol.1 : 비트 시프트 연산자》, 2014-05-26</ref>
54번째 줄: 40번째 줄:
  
 
[결과값]
 
[결과값]
     결과값은 32 % 32 = 0 이므로 아무런 시프트가 되지 않은 값으로, 똑같이 -1을 갖는다. byte 타입이면 % 8. short 타입이라면 % 16, long 타입이라면 % 64의 결과값으로 시프트 된다.
+
     결과값은 32 % 32 = 0 이므로 아무런 시프트가 되지 않은 값으로, 똑같이 -1을 갖는다. byte 타입이면 % 8. short 타입이라면 % 16, long 타입이라면 % 64의 결과값으로 시프트 된다.  
 
 
 
== 활용 ==
 
== 활용 ==
 
<ref>〈[https://neul-carpediem.tistory.com/20 시프트 연산자 java코드]〉, 《만들어가는 나의 공간》, 2017-07-19</ref>
 
<ref>〈[https://neul-carpediem.tistory.com/20 시프트 연산자 java코드]〉, 《만들어가는 나의 공간》, 2017-07-19</ref>
92번째 줄: 77번째 줄:
 
{{각주}}
 
{{각주}}
  
== 참고자료 ==
+
== 참고 자료 ==
* 시프트 연산자-시프트 연산자 종류, 비트연산의 특징, 〈[https://codedragon.tistory.com/584 시프트 연산자 특징]〉, 《Tistory - CodeDragon Bolg》
+
*시프트 연산자-시프트 연산자 종류, 비트연산의 특징, 〈[https://codedragon.tistory.com/584 시프트 연산자 특징]〉, 《Tistory - CodeDragon Bolg》
* 비트 연산자-시프트 연산자,〈[https://colossus-java-practice.tistory.com/19 시프트 연산자 계산공식]〉, 2019-05-20《Tistory - Colossus Blog》
+
*비트 연산자-시프트 연산자,〈[https://colossus-java-practice.tistory.com/19 시프트 연산자 계산공식]〉, 2019-05-20《Tistory - Colossus Blog》
* 자바의신 Vol.1 : 비트 시프트 연산자, 〈[https://secretroute.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%9D%98%E7%A5%9E-Vol1-%EB%B9%84%ED%8A%B8-%EC%8B%9C%ED%94%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90 연산자 주의사항]〉, 2014-05-26《Tistory - Secretroute Blog》
+
*자바의신 Vol.1 : 비트 시프트 연산자, 〈[https://secretroute.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%9D%98%E7%A5%9E-Vol1-%EB%B9%84%ED%8A%B8-%EC%8B%9C%ED%94%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90 연산자 주의사항]〉, 2014-05-26《Tistory - Secretroute Blog》
* [JAVA] 연산자, 〈[https://neul-carpediem.tistory.com/20 시프트 연산자 java코드]〉, 2017-07-19《Tistory - 만들어가는 나의 공간》
+
*[JAVA]연산자, 〈[https://neul-carpediem.tistory.com/20 시프트 연산자 java코드]〉, 2017-07-19《Tistory - 만들어가는 나의 공간》
 
                                
 
                                
 
== 같이 보기 ==
 
== 같이 보기 ==
106번째 줄: 91번째 줄:
 
* [[비트연산자]]
 
* [[비트연산자]]
  
{{프로그래밍|검토 필요}}
+
{{프로그래밍|토막글}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)