제가 프로그래밍 실력이 모자라서... ^^;
그러나 해결방법은 찾았습니다.
간단하더군요...
문제는 교재의 소스는 터보 C위주로 작성된 것인데, 저는 윈도우용인 dev c++을 썼다는 겁니다...
터보C에서 int는 2 바이트인데, dev c++이나 VC++은 int가 4 바이트이기 때문이죠...
휴~ 어렵다...
터보 C쓸려고 turbo c ++ 3.1받았는데, 컴파일이 안되서 dev c++쓰는데 이런 혼동이 발상하네요...
떡대.. 님이 쓰신 글 :
: 아래와 같이... rotate 함수를 급조해서..돌리시면 되겠죠?
:
: #include<stdio.h>
:
: void hexDisplay(int value, int maxDigit)
: {
: printf("0x%0*x\n", maxDigit, value);
: }
:
: void rotate(int *value, int maxDigit)
: {
: int nibbleMask = 0xf;
: int rotateByte = 0;
: int digitMask = 0xf;
: int i;
:
: *value = *value << 4;
: nibbleMask = nibbleMask << (4 * maxDigit);
:
: for(i = 0; i < (maxDigit - 1) * 4; i++)
: digitMask = (digitMask << 1) | 0x01;
:
: rotateByte = (*value & nibbleMask) >> (4 * maxDigit);
: *value = (digitMask & *value) | rotateByte;
: }
:
: int main()
: {
: int a, i;
: a = 0x1234;
:
: printf("digit size : 4\n");
: printf("0x%04x rotate\n\n", a);
:
: for(i = 0; i < 4; i++)
: {
: rotate(&a, 4);
: hexDisplay(a, 4);
: }
:
: printf("\ndigit size : 5\n");
: printf("0x%05x rotate\n\n", a);
:
: for(i = 0; i < 4; i++)
: {
: rotate(&a, 5);
: hexDisplay(a, 5);
: }
:
: return 0;
: }
:
: 기타솔로 님이 쓰신 글 :
: : 아주 기초적인 프로그램을 짜다가 책과 실행결과가 틀려서 문의드립니다.
: : 간단한 left shift와 righ shift문제인데, right shift는 문제가 없으나 left shift는 자리수때문에 원하는 결과를 얻지 못하고 있습니다.
: : 예를 들어 16진수 0X1234가 있는데 4비트 left shift한 결과(2340)와 4비트 right shift(0123)한 결과를 얻고 싶다고 가정하면,
: : right shift는 0123으로 정확히 나오나 left shift를 하면 12340으로 나옵니다.
: : 제 생각에는 변수의 크기 문제로 생각되는데 어떻게 하면 간단히 원하는 결과를 얻을 수 있을까요?
: :
: : dev c++이며, 소스는...
: : -------------------------------------------
: : #include<stdio.h>
: : int main()
: : {
: : int a, result;
: : a = 0X1234;
: :
: : result = a << 4;
: : printf("\n %04X", result);
: : result = a >> 4;
: : printf("\n %04X", result);
: : printf("\n\n");
: : }
: : --------------------------------------------
|