본문 바로가기

Study/c,c++5

비트마스크 bool 배열을 사용하는 것보다 비트 마스크를 사용한 방법이 더 편리한 경우가 있다. bool arr[10] = {true,false,true,false,true,false,true,false,true,false}; int bitmask = 341; //0b0101010101 위와 같이 10개의 진리 값을 배열과 비트 마스크를 사용해서 나타냈다고 하자. int형은 32비트 길이의 자료형이기 때문에 32개의 요소를 나타낼 수 있지만 첫 10개의 비트만 사용했다. 여기서 모든 진리 값을 반전한다고 해보자. 배열로 나타낸 경우 반복문을 이용해서 각각의 위치에 접근하여 하나하나 바꿔주어야 할 것이다. 그러나 비트 마스크를 사용하여 나타내었다면 NOT연산 하나로 끝낼 수 있다. // 반복문 for(int i=0;i 2021. 5. 8.
비트 연산 기본 이 글은 기본적인 비트 연산을 다룬다. L shift i 는 n을 오른쪽으로 i번 밀겠다는 의미이다. n = 0000101(2) 일 때 n >> 2는 0000001(2)이 된다. cout 2021. 5. 5.
c++에서 class의 private 멤버를 일반적이지 않은 방법으로 읽기 c++의 private 접근 지정자는 "동일한 class가 아니라서 접근하실 수 없습니다."라 말한다. "아니 내가 좀 보겠다는데 거 한 번만 봅시다~" 라 말해도 "친구(friend)가 아니라면 만날 수 없습니다"는 말만 돌아올 뿐이다. 하지만 난 같은 class도 아니고 friend도 아니다. 그렇다고 기존에 있던 class의 코드를 수정하고 싶지는 않다. 그렇다면 private 멤버를 읽을 방법이 없는가? 그렇지는 않다. 우리는 몇 가지 편법을 사용해서 private 멤버를 읽고 임의로 수정할 수 있다. 이 글에선 friend를 이용한 일반적인 방법을 한번 본 후 수많은 꼼수들 중 두 가지 방법을 소개할 것이다. Friend를 사용한 일반적인 방법 만약 내가 이미 접근하려는 class의 friend.. 2021. 4. 25.
C/C++서 양수 정수 나눗셈 결과의 올림 구하기 math.h의 ceil을 쓰면 간단하게 구할 수 있지만, 다르게도 한번 해보자. c = (a+b-1)/b; 확인해보자. #include int main(void){ int a[7] = {5,6,7,11,100,65,99}; int b[7] = {2,2,5,5,5,13,30}; for(int i=0;i 2021. 3. 1.
Scanf의 형식지정자에 대하여 scanf는 c언어를 배울 때 처음 배우는 입력 함수이다. 정수 하나를 입력받는다고 하자. int i; scanf("%d",&i); 위와 같을 꼴로 int 정수 하나를 입력받을 것이다. scanf에서 우리가 첫 파라메터로 입력한 값을 형식지정자라고 한다. 이 값을 잘 조정함으로 우리는 다양한 입력을 여러가지 방법으로 받을 수 있다. 예를들어 123456789 라는 입력이 있을 때 이 입력을 9자리의 정수가 아닌 3자리의 정수 3개로 받을 수 있다. #include int main(void){ int a,b,c; scanf("%3d%3d%3d",&a,&b,&c); printf("a:%d, b: %d, c: %d\n",a,b,c); } 이때 출력은 다음과 같다. > a:123, b: 456, c: 789 형.. 2021. 2. 26.