資料型別
整型資料型別
對于整型資料而言,它們默認都是有符號的,
int main()
{
char; //1byte
short; //2byte
int ; //4byte
long int; //4byte
long long; //8byte
//無符號型別unsigned
unsigned char; //1byte
unsigned short; //2byte
unsigned int ; //4byte
unsigned long int; //4byte
unsigned long long; //8byte
return 0;
}
浮點資料型別和其他型別
對于浮點數來說,它們是后期加進去的,本身就是有符號的,
int main()
{
float; //4byte;
double; //8byte;
long double; //8byte,12byte,16byte;
bool; //1byte 一個位元位;
void; //不能定義變數,但是能定義指標;
return 0;
}
資料在記憶體中的存盤方式
一般而言,我們計算機遵循小端存放,

怎么檢測當前系統是否是小端存放?
int main()
{
short ch=0x0001;
char*p=(char*)ch;//讓指標指向高位,如果檢測出來是00則是大端存放;
if(*p==1)
{
printf("xiao\n");
}
else
{
printf("da\n");
}
return 0;
}
計算機存盤資料的方式
- 計算機存盤的是資料的補碼,
原碼:就是二進制表示法,即最高位是符號位(0為正,1為負),其余位數為數值的大小,
正數的原碼反碼補碼都是相同的,
負數的原碼是符號位不變,其余資料按位取反得反碼,反碼+1得補碼,

型別的表示是有一定范圍的,例如char型別它表示的范圍是-128~127,
在執行函式或者列印函式時,一定要注意型別可以表示的范圍,以下給出示例:
#include<stdio.h>
int main()
{
for (char a = 0; a < 128; ++a)
{
printf("%4d", a);
}
printf("\n");
return 0;
}
決議:正數范圍到127截止,即0111 1111,在+1成1000 0000負數,所以形成無限回圈,列印結果如下:


如果是for (unsigned sigchar a = 0; a < 128; ++a)則列印0~127.
資料的隱式轉換
基本資料型別的隱式轉換
- 表示范圍小的賦值給表示范圍大的,如果自身有符號數,擴充的是符號數,如果自身沒有符號數,擴充的是0,
代碼示例:
int main()
{
char a = 5;
char b = -5;
int x = a;
int y = b;
unsigned int z = b;
printf("x=%d y=%d z=%d\n", x, y, z);
printf("x=%x y=%x z=%x\n", x, y, z);
return 0;
}

所以執行結果的十六進制表示如下所示:

以下再給出一些示例:

2. 表示范圍大的賦值給表示范圍小的,小范圍是幾位元組則從大范圍的低地址截取幾位元組,
#include<stdio.h>
int main()
{
int x = 0x123456A8;
short a = x;
printf("%d", a);
char b = x;
printf("%d", a);
}

所以代碼運行結果如下所示:
int main()
{
char ch='a';
int x=0;
x=ch;
x=(int)ch; //在這里進行轉換時,ch的型別并不發生轉換,而是將ch擴充之后的值存入臨時空間給x;
return 0;
}
當不同基本型別資料進行比較時,要進行隱式轉換,當兩個資料都是char型別或者short int型別時,系統將它們轉換成int型別進行比較,
總結:
- 所謂型別相容,指的就是型別不同但系統可以自動進行轉換,
- 型別相容只針對基本資料型別,指標,陣列,結構體型別,聯合體型別,列舉型別,不具此性質,
浮點數的隱式轉換
根據國際標準IEEE754(電氣和電子工程協會),任意一個二進制浮點數X可以表示成下面的形式:(-1)S*M*2E
- (-1)^s表示符號位,當s=0,X為正數;當s=1,X為負數,
- M表示有效數字,大于等于1,小于2,
- 2E表示指數位,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279986.html
標籤:其他
下一篇:mit6.S081小結
