디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

늅이를 위한 개뻘글] 시프트연산이 *2 ,/2연산이 되는 이유

===(123.108) 2010.11.05 05:03:46
조회 234 추천 0 댓글 19

32비트 워드단위의 프로세서를 위주로 설명하면

각 자리의 비트를 오른쪽부터 b0, b1, b2, ...., b31이라는 미지수로 대응시켜 보자. 물론 모든 i에 대해 bi는 0이나 1을 갖겠져.

그럼 1 워드는 다음과 같은 나열이 되겠져.
b31 b30 b29 b28 b27 ........ b3 b2 b1 b0

너님들이 아는 2진법->10진법 변환은 어떻게 하지? 각 자리마다 2의 n승을 곱해서 다 더하면 되지.
그럼 위의 1워드 표현은 다음과 같이 A라는 10진법의 수가 되겠져.

A = (2^31)*b31 + (2^30)*b30 + (2^29)*b29 + ... + (2^3)*b3 + (2^2)*b2 + (2^1)*b1 + (2^0)*b0

자 여기서 <<1만큼 우측으로 시프트연산을 했다고 생각해 보자.

b30 b29 b28 b27 ........ b3 b2 b1 b0  0

시프트했으니까 제일 좌측이었던 b31은 없어지고 제일 우측 b0이 있던 자리는 0으로 채워질 거예여.
그럼 표현식이 어떻게 변할까여?

B = (2^31)*b30 + (2^30)*b29 ... + (2^5)*b4 + (2^4)*b3 + (2^3)*b2 + (2^2)*b1 + (2^1)*b0 + (2^0)*0
이 되겠지?

b31은 오버플로우 나서 없어진다는건 당연히 알거야. 32비트짜리 컴퓨터잖아.
왼쪽 시프트하면 제일 왼쪽 비트는 없어지고 제일 오른쪽 비트는 0으로 채워지지.

(아 물론 언사인드냐 사인드냐 사용하는 시프터가 뭐냐에 따라서 존니 다르긴 합니다.)

시프트한 연산 B가 2A와 같다는 걸 증명하기 위해 A에 2를 양변에 곱해보자.

2A = 2((2^31)*b31 + (2^30)*b30 + (2^29)*b29 + ... + (2^3)*b3 + (2^2)*b2 + (2^1)*b1 + (2^0)*b0)
    = 2((2^31)*b31 + (2^30)*b30 + (2^29)*b29 + ... + (2^3)*b3 + (2^2)*b2 + (2^1)*b1 + (2^0)*b0)
    = (2^32)*b31 + (2^31)*b30 + (2^30)*b29 + ... + (2^4)*b3 + (2^3)*b2 + (2^2)*b1 + (2^1)*b0

근데 32비트 컴퓨터에서는 0부터 2^32-1까지의 숫자밖에 표현 못한다는건 알져?
이 현상을 두고 오버플로우라고 이야기하는데 정확히 말하면 오버플로우가 아니예여. 나눗셈 연산이져.
이건 한마디로 그보다 큰 숫자가 있으면 나누기 (2^32)를 해서 나머지만 표현한다는걸 말함
그럼 젤 앞쪽의 (2^32)*b31은 2^32의 배수니까 나누기 연산하면 절대 나머지가 안되겠져? 무조건 2^32로 나눠지니까여.
물론 그보다 더 큰 자릿수도 마찬가지예여. 1000000이 10으로 나눠진다는 말하고 똑같아여. 물론 여기선 (2^(n+1)) % (2^n)으로 말해야 되지만.
따라서 2A는 컴퓨터에서 이렇게 변환되여.

2A = (2^31)*b30 + (2^30)*b29 + ... + (2^4)*b3 + (2^3)*b2 + (2^2)*b1 + (2^1)*b0 + (2^0)*0

근데 이 식 어디서 많이 보던거져?

B = (2^31)*b30 + (2^30)*b29 + ... + (2^4)*b3 + (2^3)*b2 + (2^2)*b1 + (2^1)*b0 + (2^0)*0

따라서 
 2A = B
따라서 좌측 시프트는 정확히 다음과 같이 정의할 수 있어여.
A << 1 == (A*2) % (2^32)

이걸 연장하면
A << n == (A*n) % (2^32)
라고 생각할 수 있겠져.

우측 시프트는 반대로 2를 나눠서 몫을 가진다고 생각하면 되여. 나머지는? 걍 버려지는거져.


참고로 32비트 워드 컴퓨터의 int형으로 가지고 하는 모든 연산 (사칙연산, exp 등등)은
기본적으로 결과물을 2^32로 나눈 나머지를 갖고오는 거예여.


오늘의 산수공부 끝.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 시세차익 부러워 부동산 보는 눈 배우고 싶은 스타는? 운영자 24/05/27 - -
224113 8시간 30분.... [1] 권혁진(58.233) 10.12.11 55 0
224112 시험 망했다 \(^0^)/ [4] Rei@디씨갤로그로 이동합니다. 10.12.11 100 0
224111 촘 조용하다 오늘? [1] 땡칠도사갤로그로 이동합니다. 10.12.11 82 0
224110 노트북이 부서졌다...ㅠㅠ [9] Rei@디씨갤로그로 이동합니다. 10.12.11 194 0
224109 동적할당해서 도서관 프로그램 소스공개 [1] 꿀레갤로그로 이동합니다. 10.12.11 124 0
224107 코드를 직관적으로 짜는 게 좋은거야? [5] 노력하는초보갤로그로 이동합니다. 10.12.11 103 0
224106 요즘 갤에 잦뉴비들이 유난히 설치는거 같다 [6] Heimdal(121.185) 10.12.11 131 0
224105 c언어 코딩좀 제발부탁드려요ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ [6] 코딩(183.109) 10.12.11 119 0
224103 예비고3 실업계생인데요 [3] 응잉잉(221.155) 10.12.11 85 0
224101 c언어 프로젝트 코딩좀 해주세요 [11] 코딩(183.109) 10.12.11 195 0
224100 야이 싯팔 숙제갤러색히들아 [7] printf(115.93) 10.12.11 110 0
224099 혹시 이거 아는 사람 있어? [3] 빨리빨리(58.140) 10.12.11 117 0
224097 형들 쪽팔리지만 질문 좀 할게(숙제아님) [12] printf(115.93) 10.12.11 156 0
224096 C언어 공용체 이거 원리가 뭐야. [5] (168.131) 10.12.11 134 0
224095 c언어 실력 '상' 급 될려면 c언어 몇 년 파야 되나요??? [11] 컴돌이(58.77) 10.12.11 409 0
224094 자 토요일이라.. [1] 홍어(218.51) 10.12.11 41 0
224093 난 지금 뭔가가 크게 잘못되어 있어 도와줘 [4] 십ㄹㄹ바(211.192) 10.12.11 104 0
224092 MFC질문좀..ㅠㅠ... [4] ㄴㄴ(220.69) 10.12.11 76 0
224091 이거 왜 아웃풋이 아무것도 안뜨지? [3] 팔로윌갤로그로 이동합니다. 10.12.11 58 0
224090 세브님 감사 성공했읍니다. 언제 맛있는거라도 대접해드리고싶네요 [5] 장은성(220.121) 10.12.11 94 0
224089 사실 내 롤모델 유리한임 [4] 116.44(116.44) 10.12.11 185 0
224088 뻘소리 [2] prismatic갤로그로 이동합니다. 10.12.11 54 0
224087 vc6.0 과 vs2008 의 차이점 발견. [7] new gay[max](183.105) 10.12.11 332 0
224086 배열의 원소를 하나의 텍스트박스에 모우는 방법좀 [8] 장은성(220.121) 10.12.11 136 0
224085 아이유 dot(121.130) 10.12.11 132 0
224084 치킨먹구싶다 Rei@디씨갤로그로 이동합니다. 10.12.11 105 0
224082 자바는 왜 예외처리를 반드시 해주어야 하냐? [3] ㅁㄷㄹㅇㅊ(123.49) 10.12.11 170 0
224081 술,담배 이런거때문에 니들 뇌성능이 그모양인거다. [5] 홍어(218.51) 10.12.11 153 0
224080 visual studio 2008 에러..이건 도대체 뭔가요 [4] Paradise갤로그로 이동합니다. 10.12.11 136 0
224079 게임관련 일 안하면 winapi안배워도됨?? [1] -.ㅇ(183.101) 10.12.11 138 0
224078 프로그래머로써 머리안좋다고 걱정할꺼없음 꿀레갤로그로 이동합니다. 10.12.11 167 0
224077 횽들.. 플밍 하면서 내 머리가 좋은게 아니구나 라고 느껴본적있어 ? [6] 오..오갱..(112.146) 10.12.11 157 0
224076 우리나라에서 프로그래머가 대우못받는게 진실인가요 찌두(221.155) 10.12.11 115 0
224075 위대하신 프갤년들아, c++은 왜 안된다고 만 하냐? [7] 육체지향언어(183.105) 10.12.11 298 0
224074 아 일하기싫어 꿀레갤로그로 이동합니다. 10.12.11 88 0
224073 나도 요즘 학벌 신경쓰이네... [1] 하앍하앍(123.199) 10.12.11 163 0
224072 임베디드 프로그래밍 공부할려면 돈 많이 듬여? [5] 하앍하앍(123.199) 10.12.11 204 0
224070 Objective C는 아름다운 언어같다. 써니덕후갤로그로 이동합니다. 10.12.11 144 0
224069 구글의 퀴즈 [3] 양반씨갤로그로 이동합니다. 10.12.11 127 0
224068 케이온보니까 고딩때로 돌아가고 싶다. [1] 꿀레갤로그로 이동합니다. 10.12.11 104 0
224067 요새 어디서 듣도 보도 못한 잡놈들이 들어와서 써니덕후갤로그로 이동합니다. 10.12.11 70 0
224065 고칼로리 봐라 [4] 써니덕후갤로그로 이동합니다. 10.12.11 114 0
224064 현재 세계 최강의 프로그래머가 누구냐? [1] ㄴ1(195.117) 10.12.11 222 0
224062 오랫만에 하모니카 부는데 [1] elwlwlwk갤로그로 이동합니다. 10.12.11 74 0
224061 OOP는 어떤놈이 제일 먼저 발명했냐? [1] sdfhewu(117.79) 10.12.11 108 0
224060 늬들 통근치킨이 프로그래머가 고안해낸게 레알 08학번공대생갤로그로 이동합니다. 10.12.11 91 0
224057 아침을 여는 덕짜--르 [4] 땡칠도사갤로그로 이동합니다. 10.12.11 130 0
224056 아침임 흐엏으허엏어허엏어ㅓ엏엏ㅇ 116.44(116.44) 10.12.11 39 0
224055 쏠로는 울지 않습니다. [1] 써니덕후갤로그로 이동합니다. 10.12.11 86 0
224054 자바는 왜 중첩클래스가 상위클래스의 필드를 포함하도록 하는거지? [6] (218.1) 10.12.11 99 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2