알고리즘 (원 코드, 리 코딩, 패 치)

4940 단어
하나, 기계 수 와 진가
  • 기계 수 는 컴퓨터 에 있 는 바 이 너 리 표현 형식 으로 이 수의 기계 수 라 고 한다. 바 이 너 리 수의 가장 높 은 위치 로 기 호 를 저장 하고 정 수 는 0 이 며 음 수 는 1 이다.
  • 진 가 는 기호 가 있 는 기계 수 에 대응 하 는 진정한 수 치 를 기계 수의 진가 라 고 한다. 예: 0000 0001 = +000 0001 = +1,1000 0001 = –000 0001 = –1
  • 2. 원 사이즈
    양수 의 반 코드 와 패 치 는 그 자체 (원 코드) [+1] = [00000001] = [00000001] = [00000001] 음수 의 반 코드 는 그 원 코드 를 바탕 으로 부호 의 위치 가 변 하지 않 고 나머지 각 비트 는 반 을 취한 다. [-1] = [10000001] = [11111110] 음수 의 보충 코드 는 그 원 코드 를 바탕 으로 부호 의 위치 가 변 하지 않 고 나머지 는 여러분 이 반대로 하 는 것 입 니 다. 마지막 으로 + 1. (즉, 반 코드 를 바탕 으로 + 1) [-1] = [10000001] = [11111110] = [11111111] 왜 리 코딩 과 패 치 를 사용 합 니까?
    컴퓨터 의 기초 회로 설 계 를 매우 복잡 하 게 만 들 지 않도록 기 계 는 덧셈 만 있 고 뺄셈 은 없 을 수 있다. 연산 법칙 에 따라 하나의 정 수 를 빼 는 것 은 마이너스 하 나 를 더 하 는 것 과 같다. 즉, 1 - 1 = 1 + (- 1) = 0 이다.
    원 코드 감법 문 제 를 해결 하기 위해 반 코드 가 나 왔 다. 1 - 1 = 1 + (-1) = [00000001] + [10000001] = [10000010] (분명히 잘못된 것 이다!)
    리 코딩 사용: -2 = 1 - 1 = 1 + (-1) + [0000 0001] = [1000 0001] + [0000 0001] = [1111 1110] = [1111 1111] 그러나 [1000 0000] -0 두 개의 인 코딩 (즉 + 0 과 - 0) 표시 [0000 0000] 를 초래 할 수 있다.
    패 치 의 출현 은 바로 + 를 해결 하기 위 한 것 이다. - 0 의 문제 [1000 0000] = 0 + 1-1 = 1 + (-1) + [0000 0001] = [1000 0001] = [0000 0001] 이렇게 0 용 [1111 1111] 으로 표시 하고 [0000 0000] 는 - 128: [0000 0000] = [0000 0000] + [1000 0000] = (-1) + (-127) + [1000 0001] = [1111 1111] [1111 1111] 실제 적 으로 예전 의 - 0 의 패 치 를 사용 하여 - 128 을 표시 하기 때문에 - 128 은 원 코드 와 반전 표시 가 없다. (- 128 의 패 치 표시 [1000 0001] 계산 한 원 코드 는 [1000 0000] 이 고 이것 은 부정 확 하 다) [1000 0000] = [1000 0000] = [0000 0000] = [1000 0000] [0111 1111] = [0000 0000] = 0
    따라서 8 비트 2 진법, 원 코드 또는 반 코드 로 표시 하 는 범 위 는 [- 127, + 127] 이 고, 패 치 로 표시 하 는 범 위 는 [- [1000 0000] , [1111 1111] - 1] [- 128, 127] 이다. 기계 가 패 치 를 사용 하기 때문에 프로 그래 밍 에서 자주 사용 하 는 32 비트 int 유형 에 대해 범 위 는 [- [1000 0000] , 2^8 - 1] 이 라 고 할 수 있다.
    원리
    시계 리 턴 은 시 계 를 1 자리 12 진수 라 고 생각 합 니 다. 현재 8 시 라면 6 시 로 설정 하 십시오.
  • 왕복 2 시간: 8 - 2 = 6
  • 앞으로 10 시간 걸 기: (8 + 10) mod 12 = 4
  • 앞으로 10 + 12 = 22 시간 걸 기: (8 + 22) mod 12 = 4
  • 마이너스 마이너스 마이너스 2^8 (y! = 0)2^32 = 2^31 = x mod y = x - y [x / y] = -3 mod 2 = -3 - 2 X [-3 / 2] = -3 - 2 X [-1.5]
    위로 돌아 가 는 문제, - 2 와 10 은 동 여 입 니 다.
    (-2) mod 12 = 10
    
    10 mod 12 = 10
    

    음 수 를 양수 로 대체 하려 면 같은 나머지 두 가지 정 리 를 활용 해 야 한다.
    반신 성:-3 - 2 X (-2) (같은 나머지)
    선형 연산 정리: (증명)
    만약 -3 + 4, 1 그렇다면: (1) a ≡ a (mod m) (2) a ≡ b (mod m)그래서:
      7  ≡ 7 (mod 12)
    (-2) ≡ 10 (mod 12)
    7 -2 ≡ 7 + 10 (mod 12)
    

    다음은 바 이 너 리 문제 로 돌아 가 보 겠 습 니 다. 2 - 1 = 1 의 문제 입 니 다. c ≡ d (mod m) = a ± c ≡ b ± d (mod m) = a * c ≡ b * d (mod m) + 2-1 = 2+(-1)먼저 이 단계 에 이 르 러 - 1 의 반 코드 는 [0000 0010] 임 을 나타 낸다. 만약 에 여기 서 [1000 0001] 를 원 코드 로 본다 면 [0000 0010] = - 126, 여기 서 기호 위 치 를 제외 하면 126 이 라 고 생각한다.
    다음 과 같은 규칙 이 발견 되 었 습 니 다.
    (-1) mod 127 = 126
    126 mod 127 = 126
     :
    (-1) ≡ 126 (mod 127)
    2-1 ≡ 2+126 (mod 127)
    

    2 - 1 과 2 + 126 의 나머지 결 과 는 같 습 니 다!그리고 이 나머지 는 본 격 적 으로 우리 가 기대 하 는 계산 결과: 2 - 1 = 1
    그래서 한 수의 반 코드 는 실제 적 으로 이 숫자 가 한 모델 에 대한 동 나머지 입 니 다. 이 모델 은 우리 의 바 이 너 리 가 아니 라 표시 할 수 있 는 최대 치 입 니 다!이것 은 시계 와 마찬가지 로 한 바퀴 돌 면 표시 가능 한 범위 내 에서 정확 한 수 치 를 찾 을 수 있 습 니 다!
    그리고 2 + 126 은 시계 가 한 바퀴 돌 았 던 것 과 비슷 하 다. 기호 위 치 는 계산 에 참여 하고 넘 치 는 최고 위치 와 정확 한 연산 결 과 를 형성 하기 때문이다.
    왜 반 코드 에 1 을 더 하면 정확 한 결 과 를 얻 을 수 있 습 니까?[1111 1110] = [0000 0000] = [1111 1110] + [1111 1110] = [1111 1110] + 2-1 2+(-1) 을 원 코드 로 하고 기호 위 치 를 제거 하면: [0000 0010] 반 코드 를 바탕 으로 + 1 은 막 의 값 을 증가 하 는 것 과 같 습 니 다.
    (-1) mod 128 = 127
    127 mod 128 = 127
    2-1 ≡ 2+127 (mod 128)
    

    이때, 시계 판 은 128 개의 눈금 마다 한 바퀴 돌 고 있 는 것 과 같 습 니 다. 따라서 패 치 로 표 시 된 연산 결과 의 최소 값 과 최대 값 은 [- 128, 128] 이 어야 합 니 다.
    그러나 0 의 특수 한 상황 으로 128 을 표시 할 방법 이 없 기 때문에 보충 코드 의 수치 범 위 는 [- 128, 127] 이다.

    좋은 웹페이지 즐겨찾기