2016-11-24 2 views
0

address 주소에 11101111이 저장되어 있다고 가정하면 처음 4 비트를 마지막 4 비트에 어떻게 추가 할 수 있습니까?C에서 비트 연산

내 교수는 우리가 이것을 할 수 있음을 보여주었습니다. (*address)/16 + (*address)%16하지만 왜 작동하는지 이해할 수 없습니다. 16을 가진 모듈과 모듈을 어디에서 설명 할 수 있습니까?

+0

2^4 = 16으로 나누는 것은 마지막 4 비트를 이동하는 것과 같습니다. – nneonneo

+0

* a/16 및 * a % 16의 이진 결과를 계산합니다. –

+0

일반적으로 바이너리와 수치 기반에 대해 좀 더 알아야합니다. –

답변

1

@VanGo, 비트에 대한 연산을 수행하려면 비트 연산자를 먼저 배워야합니다.

여기에서 문제를 설명하고 있습니다.

11101111 (이진 형식 임)이며 239 (십진수)와 같습니다. 이제 1111에 1110을 추가해야합니다. 11101111에서이 두 쌍의 4 비트를 얻으려면 11101111에서 비트 단위 연산을 수행해야합니다.

상위 4 비트를 얻으려면 11101111을 왼쪽에서 오른쪽으로 네 번 이동하십시오 .

* 어드레스 >> 4 - 동일 행 * (* 어드레스)/(2 펑 4)에 주소/16

내부 컴파일러 변환 * 주소 >> 4.

하위 4 비트를 얻으려면 & 0x0f 또는 (* 주소) % 16을 (* 주소) 수행하십시오. 두 연산 모두 하위 4 비트를 제외한 모든 비트를 클리어합니다.

printf(".....%d\n",(((*address)>>4) + ((*address)&0x0f))); 

당신을 돕기를 바랍니다.