반응형
먼저 memset 함수의 기본적인 사용방법을 읽어보는 것을 추천드립니다.
예제 1
#include <stdio.h>
#include <string.h>
const int MAX_N = 2;
int main() {
int arr[MAX_N];
memset(arr, 1, sizeof(int) * MAX_N);
for (int i = 0; i < MAX_N; i++) {
printf("%d ", *(arr + i));
}
puts("");
}
int 타입 「 1 」 을 주어도 배열 원소를 1로 제대로 초기화하지 못하고 있다.
memset이 내부적으로 1 Byte 처리하고 있기 때문이다.
지정해준 값 (= value)를 unsigned char (1 byte)로 변경해서 메모리 블록을 다룬다.
▶ 1 Byte = 8 Bit 로 1 바이트(8 Bit) 단위 값으로 초기화 해주는 것이다.
int [] 원소 한개가 4 Bye를 찾지하고 이를 Bit로 표현하면 32 bit 이다.
→ 0000'0000 0000'0000 0000'0000 0000'0000
의도한 값은 「 1 」 로 초기화된 값일 것이다.
→ 0000'0000 0000'0000 0000'0000 0000'0001
실제로는 8 Bit 단위(1 Byte)로 처리하기 때문에 아래와 같이 처리된다.
→ 0000'0001 0000'0001 0000'0001 0000'0001
→ 16 진법으로 표현하면 0x01010101
→ 10 진법으로 16843009
결과적으로 「 0 」 과 char 타입은 큰 문제없이 원하는 값으로 설정할 수 있다.
e.g) char[] 문자열 값 변경, 숫자 배열을 「 0 」 으로 초기화
예제 2 - Bit를 한개씩 확인해보는 예제
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_N = 3;
int main()
{
int arr[MAX_N];
memset(arr, 1, sizeof(arr));
// 1 Byte = 8 Bit
size_t size = sizeof(int) * 8;
for (int i = 0; i < MAX_N; ++i)
{
for (int k = 0; k < size; ++k)
{
cout << ((arr[i] >> (size - (k + 1))) & 1);
}
puts("");
}
puts("");
}
Reference
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C/C++] do-while 문 형태와 활용 (0) | 2021.11.22 |
---|---|
[C] printf 서식 (0) | 2021.09.14 |
[C / C++] memset 함수 사용 (0) | 2021.09.11 |
[C] typedef enum 활용 (0) | 2021.09.11 |
[C] 로그(log) 함수 (0) | 2021.09.01 |
댓글