기사 디렉토리
머리말
이 기사에서는 2진수, 8진수, 16진수를 포함한 다양한 진법과 데이터가 메모리에 저장되는 방법을 소개합니다.
1. 바이너리:
이진수는 실제로 2보다 작은 한 자리 숫자입니다(예: 01111은 십진수로 15를 나타냄). 그러면 어떻게 얻었습니까? 예:
이진수: 0+1 = 1 +1= 10 +1= 11 +1= 100 , 여기서 10, 11 및 100은 10, 11, 100 대신 1 0, 1 1, 1 0 0으로 별도로 읽어야 합니다. ;
십진법: 0+1 = 1 +1= 2 +1= 3 +1= 4 ;
법칙은 이미 나타났습니다. 사실 이진법은 십진법과 동일하고 십진법은 십진법 1이며 이진법은 이진수 1입니다.
2. 8진수:
8진수는 8진수 1을 충족하는 것입니다
. 예: 8
진수: 0+3 = 3 +3= 6 +1= 7 +1= 10 ;
10진수: 0+3 = 3 + 3 = 6 +1= 7 +1= 8 ;
3. 16진수:
16진수 체계도 비슷해서 16진수 1의 경우에는 아라비아 숫자에 10, 11을 나타내는 단일 숫자가 없습니다... 그래서 16진수에서는 A를 사용하여 10을 나타내고, B를 사용하여 11을 나타내고, C를 사용 하여 12 를 나타 냅니다 . D는 13 , E는 14 , F는 15를 의미합니다. 예:
16진수: 7, 8, 9, A, B, C, D, E, F, 10
진수: 7, 8, 9, 10, 11, 12, 13, 14 , 15;
4.X 밑수는 십진수로 변환됩니다.
10진수: 1234
1 * 10 3 + 2 * 10 2 + 3 * 10 1 + 4 * 10 0 = 1234
2 진수: 010011
1 * 2 4 + 1 * 2 1 + 1 * 2 0 = 19
8 진수: 3741
3 * 8 3 + 7 * 8 2 + 4 * 8 1 + 1 * 8 0 = 2017
16진수: 2BE
2 * 16 2 + B * 16 1 + E * 16 0 = 702
1. 컴퓨터의 정수 저장:
정수 유형에는 char , int , long , short 가 포함됩니다(char 유형은 메모리에 ASCII 코드로 저장되므로 정수 유형으로도 간주됩니다).
정수는 메모리에 2의 보수 형태로 저장 됩니다.
예시 : Unsigned int 10
원본코드 : 000000000000000000000000001010
보완코드 : 11111111111111111111111111110110
unsigned int형이므로 32비트이고, 메모리에 있는 데이터 10을 111111111로 표현한다. 111111111 11111111111110110 형식으로 저장됩니다.
Signed int 10
원본 코드: 000000000000000000000000001010
보완: 0111111111111111111111111110110
signed int -10
원본 코드: 1000000000000000000000000001010
보완: 1111111111111111111111111111110110
둘째, 데이터에 부동 소수점 숫자를 저장합니다.
부동 소수점 유형에는 다음이 포함됩니다. float, double
부동 소수점 숫자는 과학적 표기법으로 저장되므로 부동 소수점 유형의 저장은 정수와 매우 다릅니다.
#include <stdio.h>
int main()
{
int n = 9;
float* p = &n;
printf("%d",*p);
return 0;
}
输出结果是 0
#include <stdio.h>
int main()
{
float n = 9;
int* p = &n;
printf("%d",*p);
return 0;
}
输出结果是 1091567616
부동 소수점 숫자의 저장 계산 공식은 다음과 같습니다.
(-1)^S * M * 2^E
64비트 시스템의 경우
32비트 시스템의 경우
S는 부호 비트, E는 지수, 나머지 M은 유효한 번호.
부동소수점 숫자는 과학적 표기법으로 저장되기 때문에 M에 있는 숫자의 범위는 0<M<10 이고, 컴퓨터 메모리는 이진수로 저장되기 때문에 0<M<2 이다 .
IEEE 754에서는 M을 컴퓨터 내부에 저장할 때 기본적으로 이 숫자의 첫 자리는 항상 1이므로 버려도 되고 뒷부분만 저장하도록 규정하고 있다. 예를 들어 1.01을 저장하면 01만 저장됩니다.
E는 부호 없는 정수이지만 과학 표기법의 지수로 인해 2 -2 와 같이 음수가 나타날 수 있습니다 . 따라서 IEEE 754에서는 메모리에 저장될 때 E의 실제 값에 중간 숫자를 더해야 한다고 규정하고 있는데, 8비트 E의 경우 중간 숫자는 127, 11비트 E의 경우 중간 숫자는 1023이다. 예를 들어 2^10의 E는 10이므로 32비트 부동 소수점 숫자로 저장할 때는 10+127=137, 즉 10001001로 저장해야 합니다.