[완료][재질문 수정]비트연산 질문입니다.

kkume의 이미지

char ch = 0x48;

이렇게 들어온 값이 있는데요..

MSB 4bit = 4, LSB 4bit = 8 이란 값을 어떻게 체크해야 하는지요?

추가질문:

char 1바이트에서 MSB 2개의 bit 값(b7, b6),
short 2바이트에서 MSB 2개의 bit 값(b15, b14),
int 4바이트에서 MSB 2개의 bit 값(b31, b30) 이 얼마인지 알려면 어떻게 체크해야 하나요?

아래 두 분 답변 감사합니다.

haze11의 이미지

(ch&0x0f) == 0x08
(ch&0xf0)>>4 == 0x04

Fe.head의 이미지

c++이라면

#include <bitset>
#include <iostream>
 
using namespace std;
 
int main()
{
    bitset<sizeof(char)*8>  flag(0x48);
    cout << "현재값 : " << flag << endl << endl;
 
    for(int i = 0 ; i < sizeof(char)*8 ; ++i )
        cout << i << "번째 flag 값 : " << flag[i] << endl;
 
    return 0;
}
 
출력 :
현재값 : 01001000
 
0번째 flag 값 : 0
1번째 flag 값 : 0
2번째 flag 값 : 0
3번째 flag 값 : 1
4번째 flag 값 : 0
5번째 flag 값 : 0
6번째 flag 값 : 1
7번째 flag 값 : 0

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

okdongil의 이미지

char ch은 char type이므로 1 byte 즉, 8bit인데요.
그렇다면 MSB 4bit = 4, LSB 4bit = 8을 따로 check하는 것이 의미가 있나요?
char type의 MSB 4bit, LSB 4bit check는 그냥 값을 비교하면 될거 같아요
그냥 ch == 0x48 이렇게요.

그리고 각 data type의 MSB n bit 값을 아는 것은

#define GET_MSBNBIT(var, n, type)\
(var & ((2^n)-1) << (sizeof(type)*8 - n)) >> (sizeof(type)*8 - n)

이렇게 하면 될거 같은데요...
Test는 안 해봤어요...

kkume의 이미지

맨 처음 질문에서는요..

ch = 0x48 은 십진수로 72 이잖아요.. 그런데 쓸때에는 72를 쓰는 것이 아니라, MSB 4bit 값 0x04, LSB 4bit 값 0x08 이렇게 따로 사용하기 때문입니다.

그리고 두번째 추가 질문은

char 1바이트에서 MSB 2개의 bit 값(b7, b6),
short 2바이트에서 MSB 2개의 bit 값(b15, b14),
int 4바이트에서 MSB 2개의 bit 값(b31, b30) 이 얼마인지 알려면 어떻게 체크해야 하나요?

이와 같은 의미였습니다.

Fe.head의 이미지

#define GET_MSG2BIT( var ) (((var) >> (sizeof((var)) * 8 - 2) ) & 0x03)

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

댓글 달기

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