色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談嵌入式C語言各種數(shù)據(jù)類型的內(nèi)存映像

工程師進(jìn)階筆記 ? 來源:工程師進(jìn)階筆記 ? 2023-12-28 18:21 ? 次閱讀

嵌入式 C 語言各種數(shù)據(jù)類型的內(nèi)存映像(32位平臺),如下圖所示。

6249b2c2-a567-11ee-8b88-92fbcf53809c.png

1 - signed char


#include 


intmain()
{
charmin=1<<7;
????char?max?=?(1<<7)-1;???
    for(int i=min;i<=max;i++)
    
    if(i<0)printf("%.2X?",(unsignedchar)i);
    else{
    ????printf("%c?",i);
    ????if(i%32==0)
    ????printf("
%d?",i);
    }
    getchar();
}

output :

625d616e-a567-11ee-8b88-92fbcf53809c.png

2 - 整型的signed和unsigned


#include 


int main()
{
signedintsmin=1<<31;
????signed?int?smax?=?(1<<31)-1;
    printf("%d
",smin);    // -2147483648


    printf("%d
",smax);    // 2147483647
    unsigned int umax = -1;    printf("%u
",umax);    // 4294967295
    umax = (1<<32)-1;    printf("%u
",umax);    // 4294967295


}

如果一個(gè)表達(dá)式同時(shí)包含signed和unsigned整型,signed會提升為unsgined,可能會隱藏一些意想不到的錯(cuò)誤,特別是用在比較運(yùn)算時(shí):

unsigned int a=4294967290;    
int b=-6; 
printf("%d
",a==b);//1,bpromotestounsigned

3 - double的二進(jìn)制位顯示


#include 


void printByte(double d)
{
intbs=sizeofd;
unsignedchar*ch=(unsignedchar*)&d;
for(inti=0;i

將double分成4部分顯示:

#include


typedefstructpacked_double{
    unsigned int low32;    // 小數(shù)位 低32位
    unsigned int low20:20; // 小數(shù)位 低33-52位
    unsigned int exp11:11; // 指數(shù)位 低53-63位,移碼1023+二進(jìn)制整數(shù)位-1
    unsigned int sign:1;  // 符號位} packed_double;typedef union {    double d;
    packed_double b;
} packed;


int main()
{
    packed pd;
    pd.d = -15.75;
    pd.d = 12.3;


    printf("%u %u %u %u
",pd.b.sign,pd.b.exp11,pd.b.low20,pd.b.low32);


    getchar(); 
    return 0;
}/*


0 1026 1015808 0
*/


0 1026 1015808 0
*/

4 - 數(shù)組是相同數(shù)據(jù)類型的依次存儲

數(shù)組名是一個(gè)存儲數(shù)據(jù)首元素地址具有常量性質(zhì)的特殊指針,成員是相對于基址的偏移:


#include 


void printArr(short arr[],int len)
{
for(inti=0;i

5 - 枚舉只是枚舉可以取值的一些符號常量的一個(gè)特殊整型


#include 


int main()
{

    enum Nm{LOSS,TIE,WIN}nm; // 實(shí)質(zhì)是一個(gè)整型,成員只是可能的右值(符號常量)的枚舉


    nm = LOSS;    printf("%d ",nm); // 0
    nm = TIE;    printf("%d ",nm); // 1
    nm = WIN;    printf("%d ",nm); // 2
    nm = (enum Nm)3;  
    printf("%d ",nm); // 3
    printf("
%d",sizeof(enum Nm)); // 4
    getchar();
}

枚舉讓相關(guān)符號常量內(nèi)聚為一組,相對于#define,枚舉對數(shù)據(jù)的描述性更清晰。

6 - 共用體成員的起始地址相同,共用一塊內(nèi)存空間,值相互覆蓋


#include 


int main()
{

    union Nn{int a; double b;}nn;// 成員的起始地址相同,值相互覆蓋


    nn.a = 123; // 
    printf("起始地址:%X,內(nèi)存空間占用:%d
",&nn.a,sizeof nn.a);
    nn.b = 12.3;    printf("起始地址:%X,內(nèi)存空間占用:%d
",&nn.a,sizeof nn.b);
    nn.a = 12;    printf("起始地址:%X,內(nèi)存空間占用:%d
",&nn.a,sizeof nn.a);
    getchar();
}/*
起始地址:12FF40,內(nèi)存空間占用:4
起始地址:12FF40,內(nèi)存空間占用:8
起始地址:12FF40,內(nèi)存空間占用:4
*/

當(dāng)一些事物具有更多共性,但有少量差異時(shí),可以只用一個(gè)內(nèi)嵌一個(gè)共用體的結(jié)構(gòu)體來描述:


#include
#include
#define MAXPARTS 12


structParts
{ // 零件


  int cost;


  char supplier[12];


  char unit[12] ;


};


structAssembly
{ // 裝配件


  int n_parts;


  struct {


    char partno[12];
    short quan;
  }parts[MAXPARTS];


};


structInventory
{//存貨類型,或是零件,或是裝配件


  char partno[10];


  int quan;


  enum{PART,ASSEMBLY}type; // 存貨類型


  union {


    struct Parts parts;


    struct Assembly assembly;
  }info;
};


intmain()
{

  struct Inventory screen;


  strcpy(screen.partno,"p001");
  screen.quan = 12;
  screen.type = Inventory::PART;
  screen.info.parts.cost = 122;


  strcpy(screen.info.parts.supplier,"hw");  strcpy(screen.info.parts.unit,"pcs");  


  struct Inventory shell;
  strcpy(shell.partno,"a001");
  shell.quan = 4;
  shell.type = Inventory::ASSEMBLY;
  shell.info.assembly.n_parts=22;  strcpy(shell.info.assembly.parts[0].partno,"d001");
  shell.info.assembly.parts[1].quan = 5;  int costs;  if(shell.type == Inventory::ASSEMBLY)
    costs = shell.info.assembly.n_parts;  
  printf("%d
",costs); //22
  getchar();  return 0;
}

7 - 結(jié)構(gòu)體是不同數(shù)據(jù)類型的數(shù)據(jù)依次存儲在一起

結(jié)構(gòu)體各數(shù)據(jù)成員的引用可以通過其內(nèi)存大小和字節(jié)對齊來相對于基址偏移來計(jì)算。結(jié)構(gòu)體通常用于描述某一事物,用其成員來描述該事物的某些關(guān)鍵屬性。讓該事物既可以用結(jié)構(gòu)體變量整體表示,也可以對其成員分別引用來處理該事物的各個(gè)屬性。

#include 
int main()
{
structdemo
{
chara;
shortb;
intc;
    } abc; // 成員相對于基址偏移,字節(jié)對齊


    abc.b=12;


short*p=(short*)((int)&abc+sizeof(short));//模擬編譯器計(jì)算第2個(gè)成員的偏移地址
    printf("%d %d
",abc.b,*p); // 12 12
    printf("%d
",sizeof(struct demo));// 8
    getchar();
}

8 - 位域是對整型數(shù)據(jù)的按位處理

(一次可以處理n個(gè)位,1<=n<=整形長度),位域(全局)二進(jìn)制位顯示:


#include 


voidprintBinM(unsignedintn)
{
for(inti=31;i>=0;i--)
printf("%d",(n&1<>i);
printf("
");
}


structBf{
    unsigned a:3;    
    unsigned b:4;    
    unsigned c:5;
}bf;


intmain()
{
    bf.a =1;
    bf.b=15;
    bf.c=3;    int *p = (int*)&bf; // 505
    printf("%d
",*p);
    printBinM(*p);//00000000000000000000000111111001
    getchar();
}

位域(局部)二進(jìn)制位顯示:


#include 


voidprintBinM(unsignedintn)
{
for(inti=31;i>=0;i--)
        printf("%d",(n & 1<>i);


printf("
");
}


intmain(){
structBf{
        unsigned a:3;    
        unsigned b:4;    
        unsigned c:5;
    }bf;
    bf.a =1;
    bf.b=15;
    bf.c=3;    int *p = (int*)&bf; // -858996231
    printf("%d
",*p);
    printBinM(*p);//11001100110011001100000111111001
    getchar();
}
審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5087

    文章

    19148

    瀏覽量

    306171
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137140
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13637

原文標(biāo)題:嵌入式 C 語言,各種數(shù)據(jù)類型的內(nèi)存映像

文章出處:【微信號:工程師進(jìn)階筆記,微信公眾號:工程師進(jìn)階筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言中基本數(shù)據(jù)類型、變量和常量的使用

    C語言中基本數(shù)據(jù)類型、變量和常量的使用
    發(fā)表于 08-18 16:42 ?2856次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中基本<b class='flag-5'>數(shù)據(jù)類型</b>、變量和常量的使用

    Labview各種數(shù)據(jù)類型

    Labview各種數(shù)據(jù)類型
    發(fā)表于 12-11 11:27

    嵌入式基礎(chǔ)之C語言全套視頻教程分享

    嵌入式C語言是作為嵌入式Linux開發(fā)的基礎(chǔ)語言,也是學(xué)習(xí)嵌入式的必備
    發(fā)表于 05-02 13:28

    嵌入式 C 語言

    目錄基礎(chǔ)知識數(shù)據(jù)類型const 用法作用域與 static 用法extern 用法基礎(chǔ)知識嵌入式C語言和普通C
    發(fā)表于 07-01 08:58

    嵌入式開發(fā)的C語言代碼中數(shù)據(jù)類型

    嵌入式開發(fā)中的C語言代碼中,經(jīng)常可以看到類似uint8_t、uint16_t、uint32_t、uint64_t這種數(shù)據(jù)類型,在教材中卻從來沒見過。實(shí)際上這些
    發(fā)表于 12-15 07:43

    C預(yù)處理與C語言基本數(shù)據(jù)類型

    指令表:注意:宏名的書寫由標(biāo)識符與兩邊各兩條下劃線構(gòu)成。C語言基本數(shù)據(jù)類型不同操作系統(tǒng)中數(shù)據(jù)類型所占字節(jié)數(shù)圖解數(shù)據(jù)類型的其他分類:變量常量(
    發(fā)表于 12-21 08:29

    嵌入式開發(fā)常用數(shù)據(jù)類型有哪些

    嵌入式開發(fā)中的常用數(shù)據(jù)類型嵌入式開發(fā)主要用到的是C語言C
    發(fā)表于 12-24 08:15

    嵌入式 C 語言(上)

    目錄基礎(chǔ)知識數(shù)據(jù)類型const 用法作用域與 static 用法extern 用法基礎(chǔ)知識嵌入式C語言和普通C
    發(fā)表于 10-19 18:33 ?3次下載
    <b class='flag-5'>嵌入式</b> <b class='flag-5'>C</b> <b class='flag-5'>語言</b>(上)

    整型的signed和unsigned詳解 double的二進(jìn)制位顯示

    C語言各種數(shù)據(jù)類型內(nèi)存映像(32位平臺)
    的頭像 發(fā)表于 06-06 17:01 ?2385次閱讀

    C語言各種數(shù)據(jù)類型內(nèi)存映像

    ? C語言各種數(shù)據(jù)類型內(nèi)存映像(32位平臺): 0 signed char ? #include?stdio.hint?main(){??
    的頭像 發(fā)表于 07-06 14:49 ?1037次閱讀

    如何做好嵌入式開發(fā)?嵌入式C語言知識點(diǎn)總結(jié)

    對于數(shù)據(jù)的管理就貫穿著整個(gè)嵌入式應(yīng)用的開發(fā),它包含數(shù)據(jù)類型,存儲空間管理,位和邏輯操作,以及數(shù)據(jù)結(jié)構(gòu),C
    發(fā)表于 01-06 11:29 ?757次閱讀

    C語言數(shù)據(jù)類型-2

    對于一個(gè)計(jì)算機(jī)程序,它所做的所有運(yùn)算的本質(zhì)都是數(shù)據(jù)的處理。但是數(shù)據(jù)的樣式并不單一,因此就有了各種各樣的數(shù)據(jù)類型。在C
    的頭像 發(fā)表于 02-21 14:44 ?800次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>數(shù)據(jù)類型</b>-2

    Verilog最常用的2種數(shù)據(jù)類型

    Verilog 最常用的 2 種數(shù)據(jù)類型就是線網(wǎng)(wire)與寄存器(reg),其余類型可以理解為這兩種數(shù)據(jù)類型的擴(kuò)展或輔助。
    的頭像 發(fā)表于 05-29 16:27 ?2378次閱讀
    Verilog最常用的2<b class='flag-5'>種數(shù)據(jù)類型</b>

    PostgreSQL中可用的各種數(shù)據(jù)類型

    PostgreSQL是一種功能強(qiáng)大的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有廣泛的數(shù)據(jù)類型支持。在本教程中,我們將介紹PostgreSQL中可用的各種數(shù)據(jù)類型,包括數(shù)值、字符串、幾何、時(shí)間、日期、布爾、貨幣
    的頭像 發(fā)表于 09-19 14:08 ?4379次閱讀

    redis的五種數(shù)據(jù)類型

    Redis是一種高性能的內(nèi)存數(shù)據(jù)庫,常用于緩存、任務(wù)隊(duì)列、分布鎖等場景。它提供了多種數(shù)據(jù)類型來滿足各種不同的需求,包括字符串(string
    的頭像 發(fā)表于 11-16 11:06 ?663次閱讀
    主站蜘蛛池模板: 久久婷婷五月综合色丁香| 麻豆影视在线直播观看免费| 爱人 qvod| gayxxxxgay呻吟受日本| vivoe另类| 囯产精品一区二区三区线| 国产3级在线| 国产人妻人伦精品9| 精品国产99久久久久久麻豆| 久久精品亚洲精品国产欧美| 麻豆一区二区免费播放网站| 鸥美一级黄色片| 日本在线免费| 性吧 校园春色| 永久免费在线观看视频| brazzers欧美孕交| 国产成人免费a在线资源| 国产在线播放KKK| 空姐内射出白浆10p| 啪啪后入内射日韩| 午夜福利理论片在线播放| 伊人久久青青草| 99在线免费视频| 国产精品亚洲专一区二区三区| 久久re6热在线视频| 欧美成a人片免费看久久| 无码日韩人妻精品久久蜜桃入口| 亚洲视频成人| youjizz护士| 国内精品日本久久久久影院| 毛片手机在线看| 丝袜美腿美女被狂躁在线观看| 亚洲熟伦熟女专区| jizzjizz丝袜| 国产无遮挡又黄又爽在线视频| 麻花传媒XK在线观看| 熟妇无码乱子成人精品| 最近中文字幕mv手机免费高清| 成人动漫百度影音| 精品国产麻豆免费人成网站| 琪琪午夜福利免费院|