float형의 오버플로우를 알고 싶습니다.

yamong의 이미지

너무 많이 물어봐서 혼자서 해결하려고 했는데....ㅡㅡㅋ
int형은 일정한 숫자 이상이면 overflow를 알 수 있는데, float형은 오버플로우를 어떻게 알 수 있나요?
제가 만들고 있는 프로그램에서 int형과 float형의 변수에 오버플로우가 나면 실행을 중지 시키게끔 하고 싶습니다. 어떻게 그것을 찾아 낼 수 있는지요?
이킁. 한가지 더요.
int i;
scanf("%d", &i);
이런 식으로 int형을 입력 받을 때, 문자를 입력받으면 에러를 출력 하려고 합니다. 이때는 어떻게 알 수 있나요?

wooix의 이미지

32bit 중에서

31......0 라고 생각하시고..

int를 예를 들겠습니다.

31번은 부호를 나타내는 bit입니다.
30번째는 부호를 제외하고 값을 나타내는 최상위 비트입니다.
30번째 bit에서 31번째 bit로 값이 올라갈때 overflow가 일어나게 됩니다.

간단하게 표현하면

V = I:31 XOR I:30을 하게 되면

31번재와 30번재의 부호가 서로 반대일 경우 V의 값이 1이 되면서 overflow를 알아낼수 있습니다.

이를 이용하시면 가능할것이라 생각합니다.

대충 코드로 해보면

#define mask31 0x8000
#define mask30 0x4000

....
int x;
..

x+=some value;

int maskedvalue31 = x & mask31;
int maskedvalue30 = x & mask30;l

int overflow = maskedvalue31 ^ maskedvalue30;
if( overflow ) {
 ...
}

뭐 대충이런걸 응용하시면 될거라 생각이 드네용.. 

그럼 이만..

평온하다~

wooix의 이미지

아 그리고 2번재 질문은..

문자를 받더라도 i 에는 숫자 즉 ascii 값이 들어갑니다.

man ascii에서 문자의 범위를 보시고 i의 값이 문자 범위라면 에러를 내면 되겠네요..

평온하다~

cdpark의 이미지

wooix wrote:
아 그리고 2번재 질문은..

문자를 받더라도 i 에는 숫자 즉 ascii 값이 들어갑니다.

man ascii에서 문자의 범위를 보시고 i의 값이 문자 범위라면 에러를 내면 되겠네요..

잘못된 정보입니다. :(

scanf가 돌려주는 값을 확인하면 됩니다. scanf는 정상적으로 처리된 변수 갯수를 돌려줍니다. 더 자세한 내용은 RTFM. :)

wooix의 이미지

int인데 char일때로 설명을 해놨네요.. 용도가 잘못되었습니다. ^^

지적 감사합니다.

평온하다~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.