비트 단위 -> 비트단위의 조작이 필요할 때 대표적으로 Bitflag
~bitwise not -> 단일 숫자의 모든 비트들 대상으로 0->1 1->0
예) 1011 -> 0100
& bitwise and -> 1011
0111 -> 0011
(같으면 1 다르면 0)
두 숫자의 모든 비트쌍을 대상으로 and한다.
| bitwise or -> 1011
0111 ->1111
(둘중 하나가 1이면 1 아니면 0)
두 숫자의 모든 비트쌍을 대상으로 or한다.
^ bitwise xor -> 1011
0111 -> 1100
두 번 xor 하면 원본이됨 (암호화)
<< 비트 죄측이동 -> 비트열을 N만큼 왼쪽으로 이동
-> 왼쪽에 넘치는 N개의 비트는 버림, 새로 생성되는 N개는 0으로 채움
-> *2를 할때 자주보이는 패턴
>> 비트 우측이동 -> 비트열을 N만큼 우측으로 이동
->오른쪽에 넘치는 N개의 비트는 버림
->부호 비트가 존재할 경우 부호 비트를 따라감 (유의), 아니면 0
비트 플래그 사용시 unsigned로 만들기를 권장
Text -> Code 영역, data -> bss(초기값 x) , rodata(읽기 전용 데이터),전역변수(.data) -> 초기값 o
Heap -> 동적 , stack(지역 변수, 함수)
함수가 관리하는 공간 -> 스택 프레임(이 안에 지역변수가 저장됨) , 함수 호출이 끝나면 사라짐.
const 는 .Rodata라고 명확하진 않다. (컴파일러의 자유)
지역변수에 const 로 하면 -> 스택메모리에 잡힘
변수의 유효범위 -> 지역변수(스택) -> 중괄호의 범위 생존 범위
같은 이름을 두번 사용할때 문제가 생김., ->중괄호 {}를 인위적으로 만들어 해결
캐스팅 int32-> int64 : 윗쪽 비트데이터가 짤린상태로 저장 (위험)
캐스팅 int32 -> float : 실수로 변환할때 정밀도 차이가 있어서 데이터 손실
캐스팅 int32 -> unsigned int : 비트단위는 똑같은데 분석하는 방법이 달라 값이 다름
'c++' 카테고리의 다른 글
C++ 개인 필기(6) 다중 포인터 및 배열 (2) | 2024.01.25 |
---|---|
C++ 개인 필기(5) 포인터 및 참조 (0) | 2024.01.24 |
C++ 개인 필기(4) 포인터 (0) | 2024.01.22 |
C++ 개인 필기(3) 반복문 및 스택 (0) | 2024.01.19 |
C++ 개인 필기(1) 데이터 (0) | 2024.01.16 |