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로 이용할려고 합니다....

고수님들의 경험이나 조언 부탁드립니다....

수고하셔요~~~

익명 사용자의 이미지

뭘 알고 싶으신건가요? ㅋㅋㅋ

이런 질문과 아주 유사한 질문을 하셨습니다.

1+2를 했더니 3이 나오고
2+3을 했더니 5가 나오거든요.
고수님들의 생각은 어떠세요?

익명 사용자의 이미지

질문 내용이 좀 빈약한것 같군요...

즉 요지는 내부에서 실제 사용되는 값을 알고 싶습니다.

int 형은 최상위 비트가 1이 되면 - 값을 가지게 됩니다.
여기서 unsighed를 붙이면 최상위 비트가 1이 되어도 -값을 가지지 않습니
다.
하지만 화면에 찍혀 나오는것은 전혀 차이가 없습니다...

unsighed long의 최대값이 42억.. 얼마로 취급되는지를
알고 싶습니다....

그럼 수고하셔요

익명 사용자의 이미지

제가 알고 있기로는 int 와 long 은 현재 32bit 처리를 하고 있는것으로
알고 있습니다 ( Intel X86 계열 )

Visual C 에서는 __int64 라는 Type 이 있어서 64bit 정수 처리가 가능한
데 gcc 에서는 어떻게 되는지 모르겠구여 ^^;;

전산기 구조 시간에 배운 부스 알고리즘인가를 보면 천문학적인 정수두
맹글수 있죠. 궁금하시면 전산기 구조 책자를 한번 찾아보시구여

그럼 이만...

익명 사용자의 이미지

type cast 아시죠?
printf()에서 %d냐 %u냐가 그거라고 생각하면 됩니다.

unsigned long x = 0xffffffff;
printf("%d\n", x);
하면 음수 나오잖아요?

32비트로 부족하면 long long 이나 unsigned long long 쓰면 됩니다.
64비트입니다.
공부가 목적이라면 간단하니까
Booth's 알고리즘도 한번 구현해 보던가요...

익명 사용자의 이미지

답변 고맙습니다...

여기서 한가지 더 의문이 생기내요...

다음과 같은 경우가 발생합니다.
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억어쩌구...

이렇게 나오내요....
이건 확실히 결과가 이상하게 나오거든요....

흘..

너무 쓸대 없는 질문 올려 죄송합니다....

너무 궁금해서요...

이상 횡설수설 입니당....
그냥 한번 생각해봐주시면 ^^

익명 사용자의 이미지

;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가 뭔지 정말 아시나요?)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.