C/C++(基礎編碼-補碼詳解)


兩個數的交換

1.引入第三者。
2.求和運算,求差。(這樣會產生內存溢出)
3.異或運算

    a = a^b;
    b = a^b;
    a = a^b;
    8b(bit位) = 1B(Byte=字節)//最小單位是字節

32位機:2^32 = 4G尋址能力
(王爽--統一編址,匯編語言)
char類型一個字節,8位。[-128,127],2^8=256種,
why?[-128,127];深層的編碼采用補碼,1,表示負數。
正常的:

    0000 0000    1
    0000 0001    2
    0111 1111    127

    ...
    1000 0000    -0
    
    ...
    1111 1111    -127

這樣1+-1=-2;
補碼規則:

    0000 0000    0
    0000 0001    1
    0111 1111    127

    ...
    1000 0000    -128
                 -127   
    
    ...
    1111 1111    -1

計算機只會做加法,1+-1=0;0000 0001 + 1111 1111= 0000 0000;高位溢出得0;

#include<stdio.h>
int main() {
    char a = 0;
    disBin(a);
    char b = 1;
    disBin(b);
    char c = 2;
    disBin(c);
    char d = 127;
    disBin(d);
    char e = -128;
    disBin(e);
    char f = -2;
    disBin(f);
    char g = -1;
    disBin(g);
}

//打印一個數的二進制
void disBin(char ch) {
    int i = 8;
    while(i--) {
        if((1<<i) & ch) {
            printf("1");
        }else {
            printf("0");
        }
        if(i%4 == 0) {
            printf(" ");
        }
    }
    putchar(10);
}

補碼的出現所有的乘法,除法,減法,都用減法實現。
補碼的規則:(運算互為逆運算)
所有的整數的補碼是他本身,所有的負數,取絕對值后取反,加一。
逆過程的運算,最高位是1,是負數。全部參與運算取反加一。
0的補碼是0;
補碼的運算相當於12進制的時鍾,其中順時針為正,逆時針為負。例如:當前時鍾在3點,要點到8點。可以順時針一可以逆時針。3+5=8,(3+12)-7=8;中的12溢出,在這之中相加互為12的稱之為“補數”。
計算機中的所有減法,乘法,除法都可有加法計算。
1-2=1+(-2),也就是相當於1加上-2的補碼。
注意:一個8位的空間,如果用來表示無符號數0-255(0-28-1),如果表示有符號的數:-128-127(-27-2^7-1)。

sizeof();

sizeof(char);//1字節
sizeof(short);//2字節
sizeof(int);//4字節
sizeof(long);//4字節
sizeof(long long);//8字節
1字節 char
0      - 255 unsigned char(無符號) 0     -2^8-1
-128   - 127 signed char           -2^7  -2^7-1
2字節 short
0      - 65535    0       - 2^16-1
-32768 - 32767    -2^15   - 2^15-1
4字節 int
0      - 2^32(40億)
-2^31  - 2^31-1
long(4個字節)沒有擴展,
long long(8個字節)。
0      - 2^64
-2^62  - 2^63-1

int 基本整型 理想的32位機,地址總線和數據總線都是32位的。

有效數字,從左至右不為0的數字。超出類型的限制之后的數字不保證正確。
float,doouble;

數據類型圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM