c++

C++ 개인 필기(2) 비트 및 캐스트

Voitcon 2024. 1. 17. 09:50

비트 단위 -> 비트단위의 조작이 필요할 때 대표적으로 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 : 비트단위는 똑같은데 분석하는 방법이 달라 값이 다름