문자열 뒤집기.. abcd를 dcba로 뒤집어 보자
포인터(배열) 연산을 안쓰고 가능할까? 궁금하다. (다음은 문제 풀이가 아니다. 그냥 브레인 스토밍일 뿐이다.)
a b c d=> 61 62 63 64=> 0110 0001, 0110 0010, 0110 0011, 0110 0100
얘를 0110 0100, 0110 0011, 0110 0010, 0110 0001 요렇게 바꿔야 한단 말이지.
z는 7a... 8비트중 앞 4비트가 항상 0110일거라고 생각할수도 없고...
0110 0001이랑 0110 0100을 & 연산을 해보자.
0110 0000이 나왔는데.. 흠 이걸로는 아무것도 못하잖아.
0110 0001이랑 0110 0100을 | 연산을 해보자.
0110 0101이 되었네, 이거면 65? 흠.. 여기에 0110 0001을 ^ 하면...
0000 0100이 되네. 흠.. 얘를 어따 써먹을데가 없나...?
0110 0001이랑 0110 0100을 ^ 연산을 해보자. (3번을 0번으로 변경)
0000 0101이 나온다. 얘랑 0110 0001을 다시 & 연산을 해보자. 0000 0001이 나온다.
0110 0001이랑 0000 0101을 | 연산을 하자. 0110 0101이 나온다. 이거에서 위의 연산 결과를 빼자.
0110 0100이 나온다. 흠, 0번은 3번으로 변경되었는데, 과연 3번은..어떻게...?
0110 0100이랑 0000 0101을 &연산을 해보자. 0000 0100이 나온다.
0110 0100이랑 0000 0101을 | 연산을 하자. 0110 0101이 나온다. 이거에서 위 연산 결과를 빼자.
0110 0100이 나온다. 흠.. 3번도 0번으로 변경되었다.
...이렇게 해도 되긴 될거 같다. 그런데... 이렇게 하면 지역변수가 2개 이상이 필요하네...- _;
걍 포인터로 캐릭터 가리키면서 임시 변수에 저장해 놓고 앞이랑 끝이랑 바꿔가면서 중간에 마주치는게 훨씬 쉽고 간편하면서도 다른사람이 알아먹기 편하겠다.
결론: 나 뭐한거임...T^T


덧글
써니 2009/05/27 12:02 # 답글
아니.. 이런 문제를 굳이 비트 연산까지 도입해서...이럴 때, 쓰는 말... 닭 잡는데 소 잡는 칼 쓴다라거나
좀 유식하게(?) 표현해서 over technology라고 한다거나...
너무 심각하게 받아들이지는 말고...
승네군 2009/05/27 12:06 # 답글
ㅎㅎ.. 재미로 해 본건데요 뭐.. : )왠지 다들 배열이나 포인터로 문제를 해결하는거 같아서 함 튀어보려고 했는데.. 저게 진짜 되는지도 모르겠고 좀 삽을 많이 떴다는 생각만 드네요 ㅎㅎ;
(우선 한가지 케이스는 위에서 손으로 비트연산 해 가면서 되는걸 확인하긴 했는데..ㅎㅎ)
김재영 2009/08/03 04:48 # 삭제 답글
머... 머리아푸다.객체지향을 합시다 ㅡㅜ
승네군 2009/08/03 10:23 # 삭제 답글
응? 객체지향에서도 비트연산은 가능할텐데연?