兩個數的交換
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;