int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니다.
일단 아래의 소스를 보십시오...
----------------------------------------
#include
main()
{
int Int;
unsigned long Long;
Long = Int = 0xffffffff;
printf("int->%d, unsigned long->%ld\n",Int, Long);
Long = Int = 0x7fffffff;
printf("int->%d, unsigned long->%ld\n",Int, Long);
Long = Int = 0xffffffff;
printf("int->%d, unsigned long->%d\n",Int, Long);
if(Int < Long){
printf("unsigned long->%ud\n",Long);
}else if(Int > Long){
printf("int->%d\n",Int);
}else if(Int = Long){
printf("이건 뭐야!! \n",Int);
}else{
printf("이것도 저것도 아니다..int->%d, unsigned long->%d\n",Int, Long);
}
}
----------------------------------------
위 소스의 실행결과
[qprk@guseok testaaa]$ gcc aaa.c
[qprk@guseok testaaa]$ ./a.out
int->-1, unsigned long->-1
int->2147483647, unsigned long->2147483647
int->-1, unsigned long->-1
이건 뭐야!!
[qprk@guseok testaaa]$
위와 같이 나왔습니다...
저의 생각으로는
int 0xffffffff 는 -1이고
unsigned long 0xffffffff는 4십2억얼마...
그래서 int < unsigned long의 결과가 나올거라 생각했지만
위와 같은 결과가 나오는군요..
40억 이상의 값을 써먹을일이 있어서 해보니 참 황당하군요....
다른 분들은 어떻게 생각하시나요?
프린트 문에서 %d 말고 %ud를 쓰면 42억 얼마.. 이렇게 나오거든요...
화면에 표시되는것이 아니라.. 내부어떤 값의 id로 이용할려고 합니다....
고수님들의 경험이나 조언 부탁드립니다....
수고하셔요~~~
Re: int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니다
뭘 알고 싶으신건가요? ㅋㅋㅋ
이런 질문과 아주 유사한 질문을 하셨습니다.
1+2를 했더니 3이 나오고
2+3을 했더니 5가 나오거든요.
고수님들의 생각은 어떠세요?
Re^2: int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니
질문 내용이 좀 빈약한것 같군요...
즉 요지는 내부에서 실제 사용되는 값을 알고 싶습니다.
int 형은 최상위 비트가 1이 되면 - 값을 가지게 됩니다.
여기서 unsighed를 붙이면 최상위 비트가 1이 되어도 -값을 가지지 않습니
다.
하지만 화면에 찍혀 나오는것은 전혀 차이가 없습니다...
unsighed long의 최대값이 42억.. 얼마로 취급되는지를
알고 싶습니다....
그럼 수고하셔요
Re^3: int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니
제가 알고 있기로는 int 와 long 은 현재 32bit 처리를 하고 있는것으로
알고 있습니다 ( Intel X86 계열 )
Visual C 에서는 __int64 라는 Type 이 있어서 64bit 정수 처리가 가능한
데 gcc 에서는 어떻게 되는지 모르겠구여 ^^;;
전산기 구조 시간에 배운 부스 알고리즘인가를 보면 천문학적인 정수두
맹글수 있죠. 궁금하시면 전산기 구조 책자를 한번 찾아보시구여
그럼 이만...
Re^3: int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니
type cast 아시죠?
printf()에서 %d냐 %u냐가 그거라고 생각하면 됩니다.
unsigned long x = 0xffffffff;
printf("%d\n", x);
하면 음수 나오잖아요?
32비트로 부족하면 long long 이나 unsigned long long 쓰면 됩니다.
64비트입니다.
공부가 목적이라면 간단하니까
Booth's 알고리즘도 한번 구현해 보던가요...
Re^4: int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니
답변 고맙습니다...
여기서 한가지 더 의문이 생기내요...
다음과 같은 경우가 발생합니다.
unsigned long a;
이렇게 선언하고
a = -1;
하니까 들어가 지내요..(컴파일할때도 아무런 에러가 나지 않고..)
그리고 printf("%d,,,%u\n",a,a);
이렇게 해서 찍어보니까
-1 과 42억얼마.. 이렇게 나오내요....
에러가 나야 정상 아닌가요?
에러가 나지 않는다면 프로그래머가 일일이 다 생각을
해줘야 하나요?
또 한가지...
unsigned long a, b;
a = 0xfffffffd; // -3
b = 0xfffffffe; // -2
printf("%d, %u", a-b, a-b);
하니까
-1, 42억어쩌구...
이렇게 나오내요....
이건 확실히 결과가 이상하게 나오거든요....
흘..
너무 쓸대 없는 질문 올려 죄송합니다....
너무 궁금해서요...
이상 횡설수설 입니당....
그냥 한번 생각해봐주시면 ^^
Re^5: int 가 큰가? unsigned long이 큰가?? 에 관한 질문입니
;unsigned long a;
;이렇게 선언하고
;a = -1;
;하니까 들어가 지내요..(컴파일할때도 아무런 에러가 나지 않고..)
;그리고 printf("%d,,,%u\n",a,a);
;이렇게 해서 찍어보니까
;-1 과 42억얼마.. 이렇게 나오내요....
;에러가 나야 정상 아닌가요?
왜 에러가 나야 한다 생각하시는지 전 도무지 모르겠네요...
;unsigned long a, b;
;a = 0xfffffffd; // -3
;b = 0xfffffffe; // -2
;printf("%d, %u", a-b, a-b);
;하니까
;-1, 42억어쩌구...
;이렇게 나오내요....
;이건 확실히 결과가 이상하게 나오거든요....
하나도 안 이상합니다.
printf("%d, %u", -1, -1);
과 똑같잖아요...
위에서도 그렇게 나왔잖아요...
쩝...
(근데 type cast가 뭔지 정말 아시나요?)
댓글 달기