c 언어 학습 노트 정리 (15) - 비트 조작
8778 단어 C 언어
1. 바 이 너 리, 비트, 바이트 (1) 바 이 너 리 정수 c 언어 는 시스템 문자 집합 을 저장 하 는 데 필요 한 크기 를 바이트 로 표시 하기 때문에 c 바 이 트 는 8 비트, 9 비트, 16 비트 또는 다른 값 일 수 있 습 니 다.그러나 메모리 칩 과 데이터 전송 율 을 묘사 하 는 데 사용 되 는 바 이 트 는 8 비트 바 이 트 를 말한다.(2) 기호 가 있 는 정수 1) 기호 가 있 는 정 수 는 하드웨어 에 달 려 있 고 c 언어 가 아 닌 하드웨어 에 달 려 있다 는 것 을 어떻게 표시 하 는 지 2) 바 이 너 리 코드 는 현재 가장 자주 사용 되 는 시스템 3) 바 이 너 리 코드 이다. 반전 비트 조합 중의 모든 비트 를 통 해 하나의 음 수 를 형성한다.4) 이 진 부호 수의 상 반 된 수 를 얻 으 려 면 가장 간단 한 방법 은 한 자 리 를 반전 시 킨 다음 에 1. (3) 이 진 부동 소수점 부동 점 수 를 두 부분 으로 나 누 어 저장 하 는 것 이다. 이 진 소수 와 이 진 i 지수 1) 이 진 소수: 이 진 표현법 은 여러 개의 1 / 2 의 멱 의 합 만 정확하게 표시 할 수 있 고 많은 점 수 는 10 진 표현법 으로 정확하게 표시 할 수 없다.많은 점수 도 이 진 표현법 으로 정확하게 표시 할 수 없다. 이 진 소수 에서 2 의 멱 을 분모 (3 / 4, 7 / 8 은 정확하게 표시 할 수 있 고 1 / 3 과 2 / 5) 2) 부동 소수점 표현법 은 몇 자리 (시스템 에 따라 다 름) 를 남 겨 서 이 진 점 수 를 저장 하고 다른 비트 저장 지 수 는 일반적으로 숫자의 실제 값 은 이 진 소수 곱 하기 2 의 지 정 된 차 멱 으로 구성 된다.2. 기타 진수 (1) 8 진법 1) 각 8 진법 은 3 개의 2 진법 2) 에 대응 하여 0 - 7 로 숫자 를 표시 하고 8 의 멱 3) 8 진법 을 바탕 으로 유일 하 게 불편 한 점 을 표시 합 니 다. 3 비트 의 8 진법 은 9 비트 2 진법 으로 (2) 16 진법 3. c 비트 연산 자 (1) 비트 논리 연산 자 바늘 로 각 비트 에 대해 진행 할 수 있 으 며 좌우 양쪽 의 위치 에 영향 을 주지 않 습 니 다.4 개의 비트 연산 자 는 모두 정형 데이터 에 사용 되 며, char 를 포함한다.1) 바 이 너 리 코드 나 비트 에 따라 반 대 를 가 져 옵 니 다. ~ 이 연산 자 는 변수의 값 을 바 꾸 지 않 지만 다른 변수 에 할당 할 수 있 는 새로운 값 을 만 들 었 습 니 다.2) 비트 와 &: 비트 별로 두 개의 연산 기 호 를 비교 하여 새로운 값 을 생 성 한다.각 비트 에 대해 서 는 두 개의 연산 대상 중 해당 하 는 비트 가 1 일 때 만 결 과 는 1 이다.(2) 용법: 마스크 의 위치 와 연산 자 (&) 는 마스크 에 자주 사용 된다. 마스크 는 열 리 거나 닫 히 는 비트 조합 을 말 하 는데 마스크 중의 0 은 불투명 하고 1 은 투명 한 것 으로 간주한다.(특정한 비트 의 값 은 변 하지 않 고 나머지 비트 는 0 으로 가 립 니 다) (3) 용법: 비트 열기 (위치 설정)
flags = flags I MASK;
비트 나 연산 자 (|) 를 사용 하여 0 과 조합 하면 결 과 는 그 자체 이 고 1 과 결합 하면 결 과 는 1 입 니 다. (4) 용법: 닫 기 비트 (비 우기)
flags = flags & ~MASK;
(5) 용법: 자리 전환
flags = flags MASK;
flags ^= MASK;
닫 힌 위 치 를 열거 나 열 린 위 치 를 닫 고 위치 이동 이나 연산 자 (^) 로 위 치 를 전환 합 니 다.(6) 용법: 검사 비트 의 값 1) 마스크 로 변수의 다른 위 치 를 덮어 쓰 고 검사 비트 의 값 으로 MASK 와 비교 합 니 다.
if ((flags & MASK) == MASK)
puts ("Wow!") ;
2) 비트 연산 자의 우선 순위 비 = = 낮 기 때문에 괄호 를 붙 여야 한다.3) 정보 가 경 계 를 넘 지 않도록 마스크 는 덮어 쓰 는 값 의 너비 와 같 아야 한다.(7) 자리 옮 김 연산 자 1) 왼쪽으로 이동: <
(10001010) << 2 //
(001010) //
2) 오른쪽 이동: > > 오른쪽 끝 자 리 를 옮 긴 값 을 잃 어 버 렸 습 니 다.기호 가 없 는 유형 에 대해 0 으로 빈 위 치 를 채 우 고 기호 가 있 는 유형 에 대해 결 과 는 기계 에 달 려 있다.비 어 있 는 위 치 는 0 으로 채 우거 나 기호 위치 (즉, 맨 왼쪽) 의 복사 본 으로 채 울 수 있 습 니 다.
(10001010) >> 2 // ,
(00100010) //
(10001010) >> 2 // ,
(11000010) //
3) 용법: 2 의 멱 에 대해 빠 르 고 효과 적 인 곱셈 과 나눗셈 을 제공 하 는 것 은 10 진법 에서 소수점 을 이동 하여 곱 하거나 10 으로 나 누 는 것 과 유사 하 다.
number < n //number 2 n
number >> n // number , number 2 n
4. 비트 필드 (1) 비트 필드 예제 1) 비트 필드 는 signed int 또는 unsigned int 형식 변수 에 인접 한 비트 (C99 와 C11 에 Bool 형식의 비트 필드 가 추가 되 었 습 니 다) 입 니 다.2) 하나의 구조 성명 을 통 해 이 구조 성명 은 각 필드 에 라벨 을 제공 하고 이 필드 의 폭 을 확인한다.3) 비트 필드 를 가 진 구 조 는 기록 설정 의 편리 한 경 로 를 제공 합 니 다. 많은 설정 (예 를 들 어 글씨체 의 굵 은 몸 이나 기울 임 꼴) 은 간단 한 두 가지 선택 입 니 다. 어떤 설정 도 여러 가지 선택 이 필요 하기 때문에 여러 자리 로 표시 해 야 합 니 다.4) 필드 에 수용 할 수 있 는 범 위 를 초과 하지 않도록 해 야 합 니 다. 5) 성명 의 총 자릿수 가 unsigned int 형식의 크기 를 초과 하면 다음 unsigned int 형식의 저장 위 치 를 사용 합 니 다.6) 한 필드 는 두 개의 unsigned int 사이 의 경 계 를 뛰 어 넘 을 수 없습니다. 컴 파일 러 는 자동 으로 경 계 를 넘 는 필드 를 이동 하여 unsigned int 의 경 계 를 정렬 합 니 다.첫 번 째 unsigned int 에 구멍 이 남 습 니 다. 이름 없 는 필드 너비 로 이름 없 는 구멍 을 채 울 수 있 습 니 다. 너비 가 0 인 이름 없 는 세그먼트 를 사용 하여 다음 필드 를 다음 정수 와 정렬 할 수 있 습 니 다.
struct {
unsigned int fieldl: 1;
unsigned int:2;
unsigned int field2:1;
unsigned int:0;
unsigned int field3:1;
}stuff;
fields 3 는 다음 unsigned int 에 저 장 됩 니 다.7) 필드 가 int 에 저 장 된 순 서 는 기계 에 달 려 있 고 어떤 기계 에 서 는 왼쪽 에서 오른쪽으로, 어떤 기계 에 서 는 오른쪽 에서 왼쪽으로.서로 다른 기계 에서 두 필드 경계 의 위치 도 차이 가 있 는데 이런 이유 로 비트 필드 는 이식 이 쉽 지 않다.8) 보통 비트 필드 를 더 치밀 하 게 데 이 터 를 저장 하 는 방식 으로 여 긴 다.9) c 는 unsigned int 를 비트 필드 구조의 기본 레이아웃 유닛 으로 합 니 다. 하나의 구조 가 유일한 구성원 이 1 비트 필드 라 하 더 라 도 이 구조의 크기 는 unsigned int 형식의 크기 입 니 다.5. 정렬 특성 C11 의 정렬 특성 은 비트 로 바이트 를 채 우 는 것 보다 자 연 스 럽 습 니 다. 그들 은 C 가 하드웨어 와 관련 된 문 제 를 처리 하 는 능력 을 대표 합 니 다. 정렬 은 대상 이 메모리 에 있 는 위 치 를 어떻게 배치 하 는 지 를 말 합 니 다.(1) 정렬 방식:
size t d align = Alignof (float);
_Alignof 연산 자 는 키워드Alignof 뒤의 괄호 에 유형 명 을 쓰 면 됩 니 다 (2) 일반적으로 정렬 값 은 2 의 비 마이너스 정수 차 멱 이 어야 합 니 다.비교적 큰 정렬 값 은 stricker 또는 stronger 라 고 불 리 며, 비교적 작은 정렬 값 은 weaker 라 고 불 린 다.(3) 사용 가능Alignas 설명자 가 변수 나 형식의 정렬 값 을 지정 하지만 기본 정렬 값 보다 작 게 요구 해 서 는 안 됩 니 다.이 설명 자 는 성명 의 일부분 으로 설명자 뒤의 괄호 는 정렬 값 이나 유형 을 포함한다.(4) 프로그램 에 stdalign. h 헤더 파일 을 포함 하면 알 리 그 나 스 와 알 리 그 노 프 를 각각 로 할 수 있 습 니 다.Alignoas 와Alignof 의 별명 은 C + + 키워드 와 일치 합 니 다.(5) C11 은 stdlib 에 있 습 니 다.h 에 새로운 메모리 분배 함 수 를 추 가 했 습 니 다. 동적 분 배 된 메모 리 를 정렬 하 는 데 사 용 됩 니 다. 원형 은 다음 과 같 습 니 다.
void *aliqned alloc(size t aliqnment, size t size);
매개 변수 1 은 지정 한 정렬 을 대표 합 니 다. 매개 변수 2 는 필요 한 바이트 수 를 대표 합 니 다. 그 값 은 첫 번 째 매개 변수의 배수 입 니 다. 다른 메모리 배분 함수 와 마찬가지 로 free () 함 수 를 사용 하여 이전에 분 배 된 메모 리 를 방출 해 야 합 니 다.요약: 보통 비트 필드 를 사용 하고 기능 특성 을 맞 추 는 프로그램 은 특정한 하드웨어 플랫폼 이나 운영 체제 에 국한 되 고 이식 할 수 없 는 것 으로 설계 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.