<질문>bit연산에 관한 질문입니다.

saba98의 이미지

이번주에 교수님이 레포트를 내주셨는데
다른건 했는데 이건 정말 어렵내영(머리가 나빠서 그런지)
! ~ & ^ | + << >>
만이용해서 함수를 구현하는건데여(조건문은 안된다고 하네여)
int isGreater(int x, int y)
{
int result=y+(~x+1);
return(result >> 31);
}
식으로여 제가 짠건데, x>y면 1을 리턴, 그렇지 않으면 0을 리턴
그런데 몇가지가 안풀리네염 ㅠㅠ
int bang(int x)인데여 !을 사용하지 않고 위의 연산자로만 구현하라는데
도무지 몇시간을 생각해도 모르겠네여
또 있는데여
int abs(int x)인수를 받고 절대값을 출력한는건데..흠
고수님들 도와주세여.^^

bugiii의 이미지

bang 이라는 함수가 무슨 일을 해야 하는지 명시하지 않았습니다. 그리고 그 함수 안에서 ! 를 사용하지 말라고 하고서는 위의 사용가능한 연산자 목록에 있습니다.

그리고 abs 는 정수의 부호비트와 2의 보수 표현만 안다면 쉽게 구현할 수 있습니다. (다만 음수는 양수보다 하나 더 많기 때문에 예외상황을 어떻게 처리하는냐가 문제가 될 수도 있습니다.)

레포트... 열심히 하세요... 혼자서 해결하셔야 나중에 분명히 도움이 됩니다.

p.s. 요즘들어 레포트라는 단어의 빈도도 높아지는 이유가 뭘까요....

lkjt의 이미지

비트

0 으로 시작은 양수
1 로 시작은 음수

따라서 앞에있는 것을 무조건 0으로 고쳐주면 절대값 아닐까요?

맹고이의 이미지

lkjt wrote:
비트

0 으로 시작은 양수
1 로 시작은 음수

따라서 앞에있는 것을 무조건 0으로 고쳐주면 절대값 아닐까요?

아니요. 2의 보수로 바꿔야 될 껄요.

세벌의 이미지

재미있는 교수님이군요. 이런 재미있는 문제를 내시다니. 그나저나 bang 은 뭘까요?

세벌의 이미지

saba98 wrote:
int isGreater(int x, int y)
{
int result=y+(~x+1);
return(result >> 31);
}

int 가 32bit라는 보장은 있나요?
세벌의 이미지

int로 표현할 수 있는 가장 작은 값의 절대값을 표현할 수 있나요? 오버플로우 되지 않을까요?

정재윤의 이미지

bit조작만으로 할 수 있는 일이 다양합니다.
알려진 바에 의하면 bit연산만으로 해낼수 있는 일은
최하위 비트부터 순차적으로 해 나갈 수 있는 일이면 가능합니다.
(필요 충분 조건)

비교, 절대값 변환, 첫번째 0아닌 bit위치 알아내기 등등 뭐 이런건 결국 다 가능합니다만, bit배열을 뒤집는 등의 일은 할 수 없습니다.

댓글 달기

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