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", 1, 1); integer = SETINTEGER(1, 1); 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) == 0) printf(" "); // 가독성을 위한 분리자 } } | cs |
* 실행환경: Linux(5.7.6-x86_64-linode136)
* 컴파일러: gcc (Ubuntu 6.5.0-2ubuntu1~14.04.1) 6.5.0 20181026
- 당신을 응원합니다. -
댓글
댓글 쓰기