1.有符號數和無符號數
有符號數就是最高位為符號位,0代表正數,1代表負數
無符號數最高位不是符號位,而就是數的一部分而已。
1011 1111 0000 1111 1111 0000 1011 1010,如果當有符號數看待,那么他是一個負數的補碼,如果當一個無符號數看待,他就是一個正數的原碼
無符號數最小為0,不可能是負數
定義一個無符號的int
unsigned int a; //使用unsigned int 定義了一個無符號的int變量,名字叫a
short,long,long long, unsigned int
short是短整型,一般short是int的一半大小,short在32位的windows下是2個字節
short最大能存放多大的十六進制數?7fff
當一個小的數據類型賦值給一個大的數據類型,不會出錯,因為編譯器會自動轉化,但當一個大的類型賦值給一個小的數據類型,那么就可能丟失高位。
long是長整型,long的大小變化比較多,在32位的windows下是4個字節,在64位的windows是4個字節,在32位的linux是4個字節,在64位的linux是8個字節。
long long長長整型,longlong在32位系統和64位系統下都是8個字節
unsigned int,unsigned short ,unsigned long, unsigned long long
100默認是int,100L代表long類型的常量,100LL代表long long類型的常量
100u代表unsigned int類型的常量,如果想表達一個unsigned long long 類型的常量,100ull
9l,9L,9ll,9LL,9u,9ull,9ULL
2. printf輸出值
%d是輸出一個有符號的10進制int類型
%o,輸出8進制的int
%x,輸出16進制的int
%X,輸出16進制的int,但abcd這些都用大寫字母
%u,輸出一個10進制的無符號數
%p 輸出內存地址
%u的意思是輸出一個unsigned int 類型的數
%lu的意思是輸出一個unsigned long 類型的數
%f 的意思是輸出float類型的數
%lf是輸出double ,long double 類型的浮點數
%c是輸出一個char類型的字符
例:以十六進制形式輸出一個byte值,帶前綴,空位補0:
byte a = 10;
printf("a is: %#04x\n", a);
得到的值是:0x0a
# 代表加上十六進制的前綴也就是0x, 04代表輸出寬度為4,寬度不足以0補齊。
3. 大端對齊和小端對齊
計算機的內存最小單位是什么?是BYTE,是字節,一個大於BYTE的數據類型在內存中存放的時候要有先后順序。
高內存地址放整數的高位,低內存地址放整數的低位,這種方式叫到着放,術語叫小端對齊。X86和ARM都是小端對齊的。
高內存地址放整數的低位,低內存地址放整數的高位,這種方式叫正着放,術語叫大端對齊,很多unix服務器的CPU是大端對齊的。
定義一個int類型的變量a,在VS下可以看到其在內存中的排列方式如下:

說明windows系統是小端對齊的。
