C 언어의 대소단 저장 및 원본 부호화 부호화 연산 관계%d%u

2794 단어 C 언어
포노이만 체계 구조 아래.메모리는 매우 중요한 구성 부분입니다!
1. 메모리 VS 외장(하드디스크, 우대디스크, 플로피 등)
  • 1.메모리는'랜덤 액세스 능력'을 지원한다. 즉, 컴퓨터가 메모리에 있는 특정한 주소의 데이터를 액세스하는 데 걸리는 시간과 비용은 많지 않다. 주소 번호의 크기와 상관없이 시간의 복잡도는 O(1)이다.외부 메모리도 랜덤 접근을 지원하지만 메모리
  • 에 훨씬 못 미친다
  • 2.적은 메모리와 큰 외장
  • 3.메모리 접근 속도가 빠르다.외장형 스토리지 속도(최대 수천 배 빠른 3-4개 수준)
  • 4.높은 메모리 비용과 낮은 외장
  • 5.전기가 빠진 후 메모리의 데이터가 분실되고 외부 메모리가 분실되지 않는다(컴퓨터가 잠을 자지 않아 전원이 꺼지면 전원이 꺼진다)
  • 2. 크기단 바이트 시퀀스 저장 방식 문제
    int NNN = 9;
    소규모 바이트 시퀀스: 디지털 저장 초기 메모리의 낮은 주소(09 00 00 00) --->간단한 기억: 작은 크기 작은 크기
    하이퍼텍스트 바이트 시퀀스: 메모리의 높은 주소에 저장된 숫자(00 00 00 0 09)
    그레버 여행기 중 소인국에서 토론하는 문제는 계란을 먹을 때 큰 머리부터 까느냐, 작은 머리부터 까느냐이다.이 문제는 크고 작은 머리에 계란을 까는 문제와 유사하다. 대단자 바이트는 사람의 직감에 부합되고 나중에 쉽게 기억할 수 있다. 계란을 먹으면 큰 머리부터 까기 시작한다.
    3. 기계의 소단 저장 여부를 판단하는 함수를 작성한다.
    int isLittleEnd(int* p) {
    	char* p2 = (char*)p;
    	if (*p2 == 0x44) {
    		return 1;
    	}
    	return 0;
    }

     4.원코드, 반코드, 부호화 등 디자인의 원인은 컴퓨터 하드웨어에서 감법기, 곱셈기, 제법기의 원가가 높고 소프트웨어에서 부호화 연산을 통해 가감 곱셈을 해결할 수 있기 때문이다.
    마이너스
    곱하기:자신 n회 증가
    나눗셈:자신을 n회 더 감소
    정수의 원코드, 반코드, 보충코드는 같다!!!
    음수의 존재 연산 관계: 부호화 = 반부호화 + 1;
    원 부호 = 부호 보충 de 부호 + 1;
    반코드
    5. 자주 사용하는%d\%u 인쇄의 의미는 무엇입니까?
    %d는: 기호가 있는 십진수 (int형 32비트) 를 인쇄합니다.
    주의해야 할 점은:char 한 바이트의 변수입니다.%d에 따라 인쇄하면,char 은식을 int형 인쇄로 변환합니다. 변환 과정에서 높은 세 바이트가 기호 위치의 값을 채웁니다.
    % u는: 기호가 없는 십진수 (int형 32비트) 를 인쇄합니다.
    같은 도리u 인쇄는 매개 변수를 unsigned int 형식으로 변환하여 인쇄합니다
    문제1: 다음 코드의 실행 결과: -1 - 1 255
    char a = -1;
    signed char b = -1;
    unsigned char c  = -1;
    printf( "a = %d, b = %d, c = %d", a, b, c);

    char형 8위. - 1의 보너스는 1111, 1111.
    int형 32비트-1의 바코드는 11111111111111111111111111111111111111
    고위는 기호 위치의 값을 보충하는데 이것은 이러한 전환 과정에서 데이터 오류가 발생하는 것을 방지하기 위해서이다.
    signed char와 char는 다를 게 없어요.
    unsigned char%d 인쇄 중
    11111111 고위 보정 0(unsigned char 기호 없음), 정수로 처리하고 보정은 0으로 보정합니다.
    그러면 보정 결과 0000 0000 0000 0000 0000 0000 1111 11 ----> 255 십진수
    결론: unsigned 유형 변수 비교 구덩이는 은식 전환 등에서 문제가 발생하기 쉬우므로 unsigned를 사용하지 않아도 된다.
    문제2: 다음 코드의 운행 결과: 4294967168
    char a = -128;
    printf("%u" ,  a);

    생각: (char)a---.>int----> unsigned int 인쇄
    기호 비트 10000000을 채워 넣습니다.
    char ---> int  \||/
    1111 1111 1111 1111 1111 1111 1000 0000
    int  ---> unsigned int  \||/
    1111 1111 1111 1111 1111 10000000 | | 이때 가장 높은 자리는 더 이상 기호의 위치가 아니라 마이너스를 표시하지 않는다. 아래의 숫자는 매우 큰 정수 4294967168로 이해된다.
    문제3: 다음 코드의 실행 결과는 다음과 같습니다.
    char a = 128; // 128     char      -128  ---> +127
    printf("%u 
    ", a);

    128 메모리에서 이진법은 0000 0000 0000 0000 0000 10000000을 나타냅니다.
    char a = 128;절단이 발생하여 유일한 1이 기호 위치가 되었고 이때 a의 값 본질은 -128이다.
    \||/암시적 int 변환
    \||/unsigned int로 변환하여 큰 정수(문제 2로 돌아가는 중)

    좋은 웹페이지 즐겨찾기