您好,登錄后才能下訂單哦!
1首先了解 低字節位 和高字節位 看圖
2字節在內存的排列方式
//int num = 010; //0開頭代表 8禁止 //("%d",num); //所以打印的是8 int num = 0x12345678; //將占 2 32位 printf("%p", &num); /* 要特別 注意 低位 在低字節 高位 高字節 0x0063FAC0 78 x 0x0063FAC1 56 V 0x0063FAC2 34 4 0x0063FAC3 12 . */ 看圖2
3 printf 不會進行自動轉換
void main()
{
printf("%d", 10.3);
printf("\n%f", 10);
getchar();
}
請看圖3
4 一定要注意數據會溢出數據會溢出
請看圖4
unsigned short num = 65535;
printf("我有現金:%d元",num);
unsigned short num = 65535+1;
printf("我有現金:%d元",num);
上面這樣數據就會溢出
5 原理
頭文件#include<limits.h> printf("%d", INT_MAX); printf("\n%d", INT_MIN); printf("\n%u", UINT_MAX); //有負號的情況下 0代表正式 1代表負數 //1111 1111 1111 1111 1111 1111 1111 1111 //0111 1111 1111 1111 1111 1111 1111 1111
6源碼反碼補碼
//1的源碼和-1的源碼
//0000 0000 0000 0000 0000 0000 0000 0001
//1000 0000 0000 0000 0000 0000 0000 0001
//-1符號為是1
源碼反碼補碼過程
//源碼1000 0000 0000 0000 0000 0000 0000 0001
//-1反碼1 符號位不變 所有0變1 1變0
//111 1111 1111 1111 1111 1111 1111 1110
//-1補碼 符號位不變 所有0變1 1變0 在補1(在反碼基礎是+1)
//111 1111 1111 1111 1111 1111 1111 1111
unsigned int num = -1;
printf("%d %u", num, num);
雖然補碼后二進制相同 但是他們有負號的符號位不算 所以數據不相同
7為什么要用補碼 非常重要!!!
0000 0001 1 (1代表十進制)
1000 0010 2 (1000 0010 是2的源碼)
如果我們用2的補碼
1000 0010 源碼
1111 1101 反碼(所有位取反 負號不變)
1111 1110 補碼(反碼基礎 +1)
這時候在相加
0000 0001 1
1111 1110 2的補碼
1111 1111 是不是就是-1
-1 源碼
1000 0001
1111 1110 反碼
1111 1111 補碼
用補碼的原因就是因為可以大大節約計算機的資源
8 數據的取值范圍
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。