c語言數據類型(一)
(強數據類型)
1.常量
常量是程序中不可變的量
10為常量
兩種常量
#define 定義宏常量
const
#對於#define 類型的常量,c語言的習慣是常量名稱大寫, 對於普通const常量以及變量,一般以小寫結合大寫的方式
#include <stdio.h> int main() { printf("%d", 10); return 0; }
#include <stdio.h> #define MAX 10 //定義一個宏常量 值為10 int main() { printf("%d", MAX);return 0; }
#include <stdio.h> #define MAX 10 //定義一個宏常量 值為10 int main() { //MAX = 200; //等號左邊必須為變量,不能為常量,常量的值不能修改 printf("%d", MAX); return 0; }
#include <stdio.h> int main() { const int a = 100; printf("%d", a); return 0; }
以上為整數常量
字符串 常量
#include <stdio.h> #defineSTRING "hello world\n"; int main() { const char * str = "hello c"; }
2. 二進制 位 字節 字
一個位只能表示 0 1 兩種狀態 bit 1位位1bit
一個字節為八個二進制 8位 BYTE 8個bit一個字節
500GB B為BYTE 10Mb bit
1個字 2個字節 簡稱WORD
2個字為雙字 ZWORD
0 八進制 0x 16進制
原碼 反碼 補碼
整數占 4個字節 以下只寫了 1個字節舉例子
sizeof 關鍵字
是c語言關鍵字,功能是求指定數據類型所占用的字節數。
#include <stdio.h> int main() { printf("%d\n", sizeof(10)); return 0; }
32位(bit)操作系統返回的為4 最大的存儲的數字 2(32-1) 的數字
size_t 類型
int類型
int 常量變量
int 是32位的一個二進制整數,在內存中占據4個字節‘’
%d , 輸出一個有符號的10進制整數
%u , 代表輸出一個無符號的10進制的整數
int main() { printf("%x\n", 0x10);//輸出10 printf("%x\n", 10);//輸出十進制10對應得十六位a printf("%x\n", 0xa);//輸出a return 0; }
#include <stdio.h> int main() { printf("%x\n", 0x10);//輸出10 printf("%x\n", 10);//輸出十進制10對應得十六位a printf("%x\n", 0xa);//輸出a printf("%x", -7); return 0; } /* printf("%x", -7); 輸出 fffffff9(這是-7的補碼轉換為16進制) 源碼 10000000 00000000 000000000 00000111 反碼 11111111 11111111 111111111 11111000 補碼 11111111 11111111 111111111 11111001 */
/*
-7
1000 0111 用有符號的眼光-7 無符號的眼光135
*/
%x 代表輸出十六進制數 (十六進制不表達負數)
%X 用大寫字母方式輸出16進制數
%o 輸出八進制數 (2進制與八進制不表達負數)
short、 long 、int 、 long long 、unsigned 、signed(有符號數)
short 為短整數 在32位操作系統占2個字節
long 代表長整數, 在32位系統下位4個字節 在64位系統下,windows 4個字節 Unix 為八個字節(不同的操作系統不一樣)
int (32位系統以上)不論在什麽情況下都是4個字節
long long 是64位 也就是八個字節的整數 對於32位操作系統cpu寄存器位32位的,計算longlong類型的數據, 效率很低
unsigned 無符號的數,可以加在任意整數類型後面
#include <stdio.h> int main() { int a = 10;//4個字節 short b = 10; printf("%d\n", sizeof(b));//2 return 0; }
#include <stdio.h> int main() { int a = 10;//4個字節 short b = 10; long long c = 10; printf("%d\n", sizeof(c));//8 return 0; }
#include <stdio.h> int main() { int a = 10;//4個字節 short b = 10; long long c = 10; unsigned int d = 10; printf("%d\n", sizeof(d));//4 return 0; }
整數溢出
一個整數計算的時候超過整數能夠容納的最大單位後,整數會溢出,溢出的結果是高位舍棄。
當一個小的整數復制給大的整數,符號位不會丟失,會集成
unsigned short abc = 0xffff; abc = abc + 1; printf("%d\n", abc);//0 return 0;
#include <stdio.h> int main() { int a = 10;//4個字節 short b = 10; long long c = 10; unsigned int d = 10; printf("%d\n", sizeof(d));//4 unsigned short abc = 0xffff; //abc = abc + 1; //printf("%d\n", abc);//0 abc = abc + 100; printf("%d\n", abc);//99 abc = 2; abc = abc - 5; printf("%u\n", abc);//65533 int i1 = 0x12345678; abc = i1; printf("%x\n", abc);//5678 short abc1 = -2; //1000 0000 0000 0010 //1111 1111 1111 1101 //1111 1111 1111 1110(-2) //1111 1111 1111 1111 1111 1111 1111 1110 i1 = abc1; printf("%x\n", i1);//fffffffe unsigned short abc2 = 0; abc2 = abc2 - 1; //00000000 00000000 //10000000 00000001 //11111111 11111110 //11111111 11111111(65535) printf("%d\n", abc2);//65535 //00000000 00000000 00001100 //10000000 00000000 00000000 00001010 //11111111 11111111 11111111 11110110 return 0; }
內存都是以字節為單位的
1個整數,4個字節
大端對齊 與小端對齊
對於arm,intel 這種x86 構架的復雜指令CPU ,整數在內存是倒著放的,低地址放高位,高地址放低位, 小端對齊
但對於uniux服務器的CPU,更多的是采用大端對齊的方式存放整數
c語言數據類型(一)