!! 를 왜쓰나요?

declspec의 이미지

이전에 무선랜 디바이스 드라이버 소스코드 분석중에

int a = !!b;

이런 코드를 본적이 있는데요,
주석에 성능향상을 위해서 저렇게 해놨다고 했는데
이해가 안가네요...?

klyx의 이미지

성능 향상은 잘 모르겠지만, !!는 보통 true/false를 판단할 때 씁니다.
예전 C에는 true/false를 나타내는 상수가 없고 0은 false 나머지는 전부 true가 인데, 값이 중요치 않고 참거짓만 중요한 경우에 true끼리의 비교가 곤란합니다.
int b1 = 1;
int b2 = 2;
이렇게 있다고 했을 때, b1 과 b2의 진리값만을 비교하고 싶을 때, b1도 true고 b2도 true지만 b1 == b2는 거짓이 되버립니다.
여기서 논리 부정인 !를 두번 쓰면 !(!b1) -> !(0) -> 1 가 되기 때문에 !!b1 == !!b2가 됩니다.
양쪽다 false인 경우는 문제될일이 없구요.

declspec의 이미지

생각해보니 그러네요~!
성능향상의 경우 저 진리값들의 비교를
if((b1!=0 && b2!=0) || (b1==0 && b2==0))
이렇게 쓰는거보다
if(!!b1 == !!b2)
이렇게 쓰는게 더 좋기 때문 아닐까요?
컴파일결과가 어떻게될지 잘 모르겠지만...;

아무튼 감사합니다~

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

oosap의 이미지

오호 이거 저도 궁금했던 것이예요..
그래서 그렇게 하는 것이군요.. ^^; 감사합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

freemckang의 이미지

세상에 그냥 있는 것은 없는 셈이군요.. ㅎㅎ

句日新, 日新 日新 又日新.

익명 사용자의 이미지

두 변수의 논리값이 같은지 다른지는 그냥 XOR로 비교하면 되지 않나요? ^^

gilgil의 이미지

좋은 정보 감사. ^^

lmk378의 이미지

오~ 좋은정보 감사합니다.
코드를 좀더 깔끔하게 짤 수 있겠네요^^

댓글 달기

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