C 언어: 비트 연산(bitwise operation)_000029

C언어: 매크로사용 000001


/// 연산

INTEGER(32bit) = SHORT(16bit) + SHORT(16bit)

/// 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define SETHIGHWORD(UINT, SINT)  ((UINT & 0xFFFF| (SINT << 16))
#define SETLOWWORD(UINT, SINT)   ((UINT & 0xFFFF0000| SINT)
#define SETINTEGER(LW, HW)       (LW | (HW << 16))
#define GETHIGHWORD(UINT)        (UINT >> 16)
#define GETLOWWORD(UINT)         (UINT & 0xFFFF)
#define GETINTEGER(LW, HW)       (LW | (HW << 16))
 
void to_binary(unsigned int value);
 
int main(void) {
    unsigned int integer;
     
    srand(time(NULL));
     
    integer = (unsigned int)rand();
 
    puts("integer - Memory");
    puts("0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7");
    puts("|-----------------------------| |-----------------------------|");
    puts("     Low order word(16bit)           High order word(16bit)");    
    puts("");
 
    puts("integer - Monitor");
    printf("integer            : %u\n", integer);
    printf("                     "); /* << */ to_binary(integer); /* << */ puts("");
    printf("                     High order word   Low order word\n");
    puts("\n");
 
    puts("------ GET WORD ------");
    printf("GET HIGH ORDER WORD: %u\n", GETHIGHWORD(integer));
    printf("                     "); /* << */ to_binary(GETHIGHWORD(integer)); /* << */ puts("");
    printf("GET LOW  ORDER WORD: %u\n", GETLOWWORD(integer));    
    printf("                     "); /* << */ to_binary(GETLOWWORD(integer)); /* << */ puts("");
    printf("INTEGER            : %u\n", GETINTEGER(GETLOWWORD(integer), GETHIGHWORD(integer)));
    puts("\n");
 
    puts("------ SET WORD ------");
    printf("INTEGER            : %u\n", GETINTEGER(GETLOWWORD(integer), GETHIGHWORD(integer)));
    puts("");
    printf("SET HIGH ORDER WORD: %u\n"5);
    integer = SETHIGHWORD(integer, 5);
    printf("                     "); /* << */ to_binary(5); /* << */ puts("");
    printf("INTEGER            : %u\n", GETINTEGER(GETLOWWORD(integer), GETHIGHWORD(integer)));
    printf("                     "); /* << */ to_binary(integer); /* << */ puts("");
    printf("                     High order word   Low order word\n");
    puts("");
    printf("SET LOW  ORDER WORD: %u\n"10);
    integer = SETLOWWORD(integer, 10);
    printf("                     "); /* << */ to_binary(10); /* << */ puts("");
    printf("INTEGER            : %u\n", GETINTEGER(GETLOWWORD(integer), GETHIGHWORD(integer)));
    printf("                     "); /* << */ to_binary(integer); /* << */ puts("");
    printf("                     High order word   Low order word\n");
    puts("\n");
 
    puts("------ SET INTEGER(HIGH, LOW) ------");
    printf("SET INTEGER        : %u, %u\n"11);
    integer = SETINTEGER(11);
    printf("INTEGER            : %u\n", GETINTEGER(GETLOWWORD(integer), GETHIGHWORD(integer)));
    printf("                     "); /* << */ to_binary(integer); /* << */ puts("");
     
    puts("");
    puts("Usage(? maybe):   <short, short> -> int");
 
    return 0;
}
 
void to_binary(unsigned int value) {
    for (int i = 32; i > 0; i--) {
        printf("%d", (value >> (i-1)) & 1 ? 1 : 0);
 
        if (((i-1& 7== 0printf(" "); // 가독성을 위한 분리자
    }
}
cs

* 실행환경: Linux(5.7.6-x86_64-linode136)
* 컴파일러: gcc (Ubuntu 6.5.0-2ubuntu1~14.04.1) 6.5.0 20181026


- 당신을 응원합니다. -

댓글

이 블로그의 인기 게시물

파이썬[Python]: 내장함수 - from_bytes 메서드

파이썬[Python]: 내장함수 - __len__ 메서드

파이썬[Python]: kivy - 한글 사용

파이썬[Python]: 내장함수 - bit_length 메서드

C 언어: sin 함수, cos 함수, tan 함수