시프트연산자 편집하기
최신판 | 당신의 편집 | ||
3번째 줄: | 3번째 줄: | ||
== 개요 == | == 개요 == | ||
− | + | 비트 값을 주어진 숫자만큼 부호 방향으로 이동시키는 연산자이다. | |
− | + | 부호로는 '>>, <<, >>>'가 있다. | |
− | + | 그 중 '>>>'는 자바에만 있는 연산자로 부호에 상관없이 비트 값들을 주어진 비트 수 만큼 오른쪽으로 이동시킨 후 빈 공간을 모두 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'라는 것을 알 수 있다. 여기서 | + | 여기서 왼쪽으로 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로 변환되어 | + | 시프트 연산자 중 '>>>'에는 몇가지 주의점이 있다. 첫째, 연산 가능한 타입이 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번째 줄: | ||
* [[비트연산자]] | * [[비트연산자]] | ||
− | {{프로그래밍| | + | {{프로그래밍|토막글}} |