기초 야: 부호 없 는 정수
5264 단어 컴퓨터 기반
JS 에서 0.1 + 0.2 = 0.300000000000000000004 의 원인 만 이해 하려 고 했 지만 컴퓨터 의 숫자 표시 와 연산 이 매우 낯 설 다 는 것 을 알 고 악 보 를 할 수 밖 에 없 었 다.『 8195 』 본 편 은 기초 적 인 기초 인 부호 없 는 정수 의 표현 방식 과 가감 곱 하기 연산 을 연구 합 시다.
Encode
『 8195 』 기호 가 없 는 정 수 는 0 보다 크 거나 같은 정수 만 표시 할 수 있다.그 바 이 너 리 인 코딩 방식 은 매우 직관 적 이 고 진가 역 만 포함한다. 우 리 는 8bit 의 저장 공간 을 예 로 들 면 진가 역 은 8bit 를 차지 하기 때문에 표시 할 수 있 는 수치 범 위 는 {0,..., 255} 이 고 대응 하 는 이 진 인 코딩 은 {0000000,..., 11111111111} 이다. 집합 론의 측면 에서 묘사 하면 우 리 는 십 진법 이 표시 하 는 수치 범 위 를 집합 A 로 정의 하고 이 진법 이 표시 하 는 수치 범 위 를 집합 B 로 정의 할 수 있 으 며 그들 사이 의 매 핑 은 f 로 정의 할 수 있다.f (a) = b, 그 중에서 a 는 A, b 는 B 에 속한다.그리고 f 는 쌍 사 함수 입 니 다.따라서 부호 가 없 는 정수 표시 방식 은 다음 과 같은 특징 을 가진다.
『 8195 』 0 확장 연산 은 수치 가 변 하지 않 는 전제 에서 서로 다른 글자 의 정수 간 의 전환 에 사용 된다.예 를 들 어 지금 우 리 는 8bit 의 00000000 을 16bit 로 확장 하려 고 한다. 그러면 우 리 는 높 은 8bit 를 0 으로 설정 하면 0000000000000 000 100 을 얻 을 수 있 고 그 수 치 는 변화 가 없 을 것 이다.
Truncation
『 8195 』 절단 은 자릿수 를 줄 이 고 원시 값 을 모델 링 합 니 다.모드 는 2 ^ n 이 고 n 은 절 단 된 자릿수 입 니 다. 예 를 들 어 현재 16bit 의 00000000000000000000000 100 을 8bit 로 자 르 면 결 과 는 00000100 이 고 모델 은 2 ^ 8 입 니 다.
Addition
* 8195 주의: 비트 급 연산 은 모두 모드 연산 입 니 다. 즉, 가감 곱 하기 후 모두 연산 결과 에 대해 모드 를 취하 고 모드 를 취한 후의 결 과 를 중지 합 니 다.『 8195 』 부호 없 는 정수 덧셈 의 연산 순서:
예 를 들 어 두 4bit 의 부호 없 는 숫자 를 더 합 니 다 (11 + 6).
1011
+0110
10001, 0001
Subtraction
『 8195 』 부호 없 는 정수 감법 의 연산 순서:
예 를 들 어 두 4bit 의 부호 없 는 숫자 가 서로 줄어든다 (11 - 6).
1011
-0110
『 8195 』 감수 에 대해 보충 코드 를 구 한 후, 감법 은 덧셈 으로 바 뀌 었 다.
1011
+1010
10101, 0101
Multiplication
곱셈 에 대해 실질 적 으로 이 위 조작 과 가, 감법 조합 을 통 해 이 루어 지고 곱셈 이 2 인지 n 차 멱 에 따라 구별 처리한다.
2.2. n 으로 각 조 의 가장 높 은 지 수 를 나타 내 고 m 로 각 조 의 가장 낮은 지 수 를 나타 낸다.예 를 들 어 1 조 n = m = 5, 2 조 n = m = 3, 3 조 n = 1 과 m = 0.2.3. 공식 (x <
:2<
2.4. 결과 에 대해 모델 링 을 한다.
Dividision
나눗셈 에 대해 실질 적 으로 이 위 조작 과 더하기, 뺄셈 을 조합 하여 만 든 것 이 고 나눗셈 이 2 인지 n 차 멱 에 따라 구별 처리 하 는 것 이다.
다음은 C 의 실현 이다.
#include
//
const unsigned short lowest_bit_weight = 1; //
int main(){
//
unsigned short dividend = 14, divisor = 5;
//
unsigned short quotients = 0, //
rem = 0; //
//
unsigned short highest_bit_weight,
divisor_aligned,
tmp_dividend = dividend;
unsigned short high_alignment;
//
while (1){
// ( )
// :1. ;
// 2. , ;
high_alignment = 0;
highest_bit_weight = lowest_bit_weight;
divisor_aligned = divisor;
while (tmp_dividend >= divisor_aligned){
divisor_aligned = divisor_aligned << 1;
highest_bit_weight = highest_bit_weight << 1;
high_alignment += 1;
}
if (high_alignment > 0){
divisor_aligned = divisor_aligned >> 1;
highest_bit_weight = highest_bit_weight >> 1;
high_alignment -= 1;
}
// , ,
if (0 == high_alignment) {
rem = tmp_dividend;
break;
}
//
quotients = quotients | highest_bit_weight;
//
tmp_dividend = tmp_dividend - divisor_aligned;
}
printf("%u/%u=%u(rem:%u)
", dividend, divisor, quotients, rem);
return 0;
}
Conclusion
『 8195 』 오리지널 을 존중 하고 전재 할 때 다음 과 같이 명시 해 주 십시오.http://www.cnblogs.com/fsjohnhuang/p/5078290.html 뚱뚱보 존 ^ ^
Thanks
《 컴퓨터 시스템 을 깊이 이해 하 다 》.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python은 두 갈래 트리의 앞뒤 순서를 차원 순서대로 반복합니다. 귀속과 비귀속Reference https://blog.yangx.site/2016/07/22/Python-binary-tree-traverse/...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.