特點一:c++/c裡面整個程式執行中型別不可變
強轉不是轉型別,而是數值的轉換
python指令碼語言,型別可變 隨著資料變化而變化型別
特點二:所有函式和變數都是先定義,再使用,不能邊定義邊使用 question2:
.c .cpp檔案是原始檔(文字檔案)
.c->.cpp 預編譯 文字->文字,預編譯只處理標頭檔案#
引入 不執行具體程式指令
.i 預編譯檔案(.i文字檔案 )
.i->.obj 編譯過程 處理型別的合法與否 語法 語義 詞法
.obj .o 編譯後的目標檔案(二進位制檔案) linux環境下常用
.obj ->.exe 鏈結 最後轉為可執行檔案
涉及到後面的靜態鏈結庫和動態鏈結庫
.exe 可執行檔案
可執行檔案被排程後 給其分配區域(空間)記憶體分為四個段
.code **段 .date 資料段
.heap 堆區 .stack 棧區
口訣:凡是在函式外定義的變數 都是在資料區 .date --全域性變數
凡是在函式內定義的變數 都是在棧區 .stack
存在例外情況:後續補充
提問:為什麼我們會對程式分這四個區域?reason?
為什麼在編譯的時候會分為預編譯,編譯,鏈結這幾個過程?
分類:char; //1 位元組 short;//2 位元組 int;//4 位元組
bool;//1位元組 float;//4 位元組
long int;//4 位元組
double;//8 位元組
long double;//8 //c11標準下 12
1位元組 = 1個儲存單元 = 8 bit (8個1/0數字)
注意區分字元與位元組;
char ch = 『a』; //存放的不是字元 而是ascii碼
char ch = 97 ; //char ch 0x61; 0x十六進製制
這兩個其實意思是一樣的
究竟輸出字元還是數字 由格式控制符決定 由程式設計師決定
char => mini_int 字元 1位元組整型
char a = 『0』; //字元0ascii碼是48 二進位制 => 0011 0000
char b = 0; //數字0min_int二進位制 0000 0000
所有轉十進位制都是對應數字乘以進製的冪
128 64 32 16 8 4 2 1 算二進位制
二進位制從中間劈開 拆成 8421 8421 算16進製制;
每三位劈開 拆成 421 421 算8進製
int a =10;
//十進位制數 10 逢十進一
int b =
010;
//八進位制數 8 逢八進一
int c =
0x10
;//十六進製制 16 逢十六進一
原始碼:反碼:符號位不變 在原始碼基礎上 求反
補碼: 符號為不變 在反碼基礎上 求反+1
正數 原始碼反碼 補碼都一樣
結論:在記憶體中按補碼存放
char a = 5; //0 000 0101 0x05
char b = -5; //1 000 0101 源
//1 111 1010 反
//1 111 1011 0xfb 補
//算16進製制的時候不管是不是符號為都算進去
問題:為什麼記憶體中儲存資料的時候按照補碼來存?
解釋:由於計算機只有加法器 cpu 只做 加法 移位 取反
無符號數則是一條從0-256的直線
有符號數:10000000
因為沒有負0這個說法
所以1000 0000是魔鬼數字這裡的1既是符號又是數值
所以:1000 0000 是-128
(127)2 + 1 = (-128)2
無符號數:1000000
128 64 32 16 8 4 2 1
1 000000 為128
#includeusing namespace std;
int main()
無符號數 無 負數,見到負數就加上當前型別的範圍,把他轉化為正數無符號數在取模運算中的使用
整型中:若把範圍小的給範圍大的:
自身有符號 擴充符號位->因為賦值之後符號不變,數值不變
自身無符號,擴充0
若把範圍大的給範圍小的:切片現象保留低位
舉例:
char a = 5; // 00000101
擴充後://原始碼=補碼:00000000 00000000 00000000 00000101 =>5
char b = -5;
擴充後: //原始碼:11111111 11111111 11111111 11111011
//反碼:00000000 00000000 00000000 00000100
//補碼:10000000 00000000 00000000 00000101 => -5
char a = 100; 0110 0100 //擴充前01100100
//擴充後:00000000 00000000 00000000 01100100
char b = 200; 1100 1000 //擴充前:11001000
//擴充後:11111111 11111111 11111111 11001000
解釋:
正數0~127 有128個數字 char要對127這個數字敏感
負數-128~-1 有128個數字
128+128 =256一圈0~255 總共有256個數
200超過了127此時相當應該是-56
200在處理器中屬於負數!!!
所以擴充套件的時候是前面是111111111……
C 引用 記憶體單元的別名
1 引用是記憶體單元的別名 例如 int b a 給a取乙個別名為b,但不能寫成 b a 引用一定是和型別結合使用的。2 雖然引用是別名,但是c 在底層是以指標的方式來支援引用的特性的,在所有使用到引用變數的地方,系統都會自帶解引用過程。在下面的 中分別用了引用和指標,我們檢視一下反彙編,我們發現兩...
C語言 char型別變數範圍
c語言中字元型別也是屬於整型,是否可以用signed和unsigned修飾符?若初系統只提供了127個字元,那麼就將char型別變數的第乙個二進位制位設定為0,用後面7位存放0 127,此時,系統提供的char型別相當於signed char 但實際應用中可用的字元往往會多於127個,據此有的系統提...
C語言資料型別char
char簡介 char是c c 中的基本資料型別,可容納單個字元的一種基本資料型別。char佔乙個位元組,也就是8個bit 二進位制位 0000 0000 1111 1111,在無符號型別時char表示的範圍是0 255,在有符號型別時char表示的範圍是 128 127,可以表示256個整數。注 ...