您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言中數據的存儲舉例分析”,在日常操作中,相信很多人在C語言中數據的存儲舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言中數據的存儲舉例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
對于基本的c語言數據類型的基本歸類
char (內存存儲的為ascall碼值,存儲為整數) unsigned char// unsigned為無符號關鍵字 signe char// short unsigned short (int)// (int )表示int可以省略不寫 signed short (int) int unsigned int signed int long unsigned long (int) signed long (int)
float
double
int* ptr; char* pa; float* pf; void* pv;
void 表示空類型(無類型)
通常應用于函數的返回類型,返回參數,指針類型
1.占據的內存大小
2.作為數據時所操作的大小(即為數據看待類型的視角)
計算機的(整形)有符號數,有三種表示方法,原碼,反碼,補碼
三種表示方法 均存在 符號位 和 數值位 兩部分,符號位的‘0'表正,‘1'表示負,數值位表示方法有差異(對于無符號數:原,反,補表示相同)
原碼:直接將數字按照正負,用二進制方法翻譯表示;
反碼:將原碼的符號位不變,其他位按位取反;
補碼:反碼+1;
對于正數而言,原,反,補相同:
int a=20; // 00000000 00000000 00000000 00010100 原碼 // 00000000 00000000 00000000 00010100 反碼 // 00000000 00000000 00000000 00010100 補碼
對于負數而言
int a=-1; // 10000000 00000000 00000000 00001010 原碼 // 11111111 11111111 11111111 11110101 反碼 // 11111111 11111111 11111111 11110110 補碼
對于整形數據而言再內存存儲的是補碼
1.大端模式(大端字節序模式):較高的有效字節存儲在較低的存儲器地址,較低的有效字節存儲在較高的存儲器地址。
2.小端模式(小端字節序模式):較低的有效字節存儲在較低的存儲器地址,較高的有效字節存儲在較高的存儲器地址。
地址的視圖
低-------------------------------->--------高
關于設計判斷當前機器的字節序
int check_sys(void) { int a=1; char* p=(char*)&a;//訪問第一個字節序看是 01.....0 還是 0...01 return *p; } int main() { int ret=check_sys(); if(ret==1) printf("小端"); else printf("大端"); }
在這里強制轉化成(char*)利用他只訪問一個字節的視角進行觀測
指針類型的意義
1.指針類型決定了指針類型解引用操作符能訪問幾個字節
2.指針+類型決定了指針+1跳過幾個字節
應用前應掌握的基本概念 整形提升
char a=-1; // -1作為整形數在內存中以補碼形式存儲 // 10000000 00000000 00000000 0000001-原碼 // 11111111 11111111 11111111 1111110 - 反碼 // 11111111 11111111 11111111 1111111 -補碼 // 當被賦予a時 a為char型只能存儲8個字節 就要發生 截斷 // 即 a 存儲為 1111111 signed char b=-1; // sigend為默認關鍵字 聲明和聲明都默認為有符號 // 同理 b 1111111 unsigned char c=-1; // c 1111111將高位當做數值位對待 printf("%d %d %d ",a,b,c); // -1 -1 255 // 當要打印為%d 應當發生整形提升 // 負數為有符號型 整形提升高位補1; // 無符號型提升高位補0,將原高位看作數值位 // 將 計算過程的 補碼 轉換為原碼后即為所求結果
char a=-128; printf("%u\n",a);
char a=-128; //10000000 00000000 00000000 10000000 //11111111 11111111 11111111 01111111 //11111111 11111111 11111111 10000000 // 截斷10000000 // char a 有符號 按符號位提升 //整形提升 11111111 11111111 11111111 10000000 作為 無符號數 原反補相同 //11111111 11111111 11111111 10000000-轉換為對應的十進制數
有符號的(以下均為補碼)
有符號char范圍 -128 --127
例題
char a[1000]; int i; for(i=0;i<1000;i++) { a[i]=-1-i; } printf("%d",strlen(a));
對于 a[i]的計算結果 從 -1......-128..127....1 0
所以所得結果為 128+127=255
無符號(同補碼)
最高位視為數值位則 范圍為 0 ---255
例題
unsigned char i=0; for(i=0;i<255;i++) { printf(" hello\n"); }
思路同上
程序陷入死循環
到此,關于“C語言中數據的存儲舉例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。