1.1?????? sizeof關鍵字
sizeof是c語言關鍵字,功能是求指定數據類型在內存中的大小,單位:字節
sizeof與size_t類型
?
1.1?????? int類型
1.1.1????????? int常量,變量
int就是32位的一個二進制整數,在內存當中占據4個字節的空間
1.1.2????????? printf輸出int值
%d,輸出一個有符號的10進制整數,%u,代表輸出一個無符號的十進制整數
1.1.3????????? printf輸出八進制和十六進制
%x,代表輸出16進制數,%X,用大寫字母方式輸出16進制數
%o代表輸出八進制數
1.1.4????????? short,long,long long,unsigned int
short意思為短整數,在32位系統下是2個字節,16個比特
long意思為長整數,在32位的系統下,long都是4個字節的,在64位系統下,windows還是4個字節,unix下成了8個字節。
Int不管是32位系統下,還是64位系統下,不論是windows還是unix都是4個字節的
Long long是64位,也就是8個字節大小的整數,對于32位操作系統,CPU寄存器是32位,所以計算longlong類型的數據,效率很低
9l,9L,9ll,9LL,9u,9ull,9ULL
1.1.5????????? 整數溢出
計算一個整數的時候超過整數能夠容納的最大單位后,整數會溢出,溢出的結果是高位舍棄。
當一個小的整數賦值給大的整數,符號位不會丟失,會繼承
1.1.6????????? 大端對齊與小端對齊
對于arm,intel這種x86構架的復雜指令CPU,整數在內存中是倒著存放的,低地址放低位,高地址放高位,小端對齊。
但對于unix服務器的CPU,更多是采用大端對齊的方式存放整數
?
#include <stdio.h>int main() {int a = 10;//4個字節大小short b = 10;printf("%d\n", sizeof(b));long c = 10;printf("%d\n", sizeof(c));long long d = 10;printf("%d\n", sizeof(d));unsigned int e = 10;//unsigned是關鍵字,代表是無符號數的意思printf("%d\n", sizeof(e));//unsigned short f;//無符號的short//unsigned long g;//無符號的long//unsigned long long i;//無符號的long long//int i1; unsigned short abc = 0xffff;abc = abc + 1 + 99;printf("%d\n", abc);abc = 2;abc = abc - 5;printf("%d\n", abc);int i1 = 0x12345678;abc = i1;printf("%x\n", abc);short abc1 = -2;i1 = abc1;printf("%x\n", i1);unsigned short abc2 = 0;abc2 = abc2 - 1;printf("%d\n", abc2);int a1 = 0x12345678;printf("%p\n", &a1);//%p的意思是顯示一個內存的地址,&a1代表變量a1的地址編號return 0; }
?資料來源:傳智播客 僅供學習研究
?