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

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

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

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

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

xCb1_yikoulinux ? 來(lái)源:一口Linux ? 作者:土豆居士 ? 2022-06-06 17:01 ? 次閱讀

C語(yǔ)言各種數(shù)據(jù)類型的內(nèi)存映像(32位平臺(tái)):

c13a9904-e420-11ec-ba43-dac502259ad0.png

0 signed char

#include int main(){    char min = 1<<7;    char max = (1<<7)-1;    for(int i=min;i<=max;i++)        if(i<0)            printf("%.2X ",(unsigned char)i);        else
        {            printf("%c ",i);            if(i%32==0)                printf("
%d ",i);
        }
    getchar();
}

output:

c15be8de-e420-11ec-ba43-dac502259ad0.png

1 整型的signed和unsigned

#include int main(){    signed int smin = 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會(huì)提升為unsgined,可能會(huì)隱藏一些意想不到的錯(cuò)誤,特別是用在比較運(yùn)算時(shí):

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

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

#include void printByte(double d){    int bs = sizeof d;    unsigned char *ch = (unsigned char*)&d;    for(int i=0;iprintf("%.2X ",*(ch+i));
}int main(){    int n = 0x01020304;    if(*(char*)&n == 4)        printf("小端:");//小端:
    double d = 15.75; // 1111.11, 指數(shù)位值:1023+3
    //0 100 0000 0010 1111100000000000000000000000000000000000000000000000
    printByte(d);//00 00 00 00 00 80 2F 40
    // 40              2F               80
    // 0100 0000 0010 1111 1000 0000
    getchar();
}

將double分成4部分顯示:

#include typedef struct packed_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;  // 符號(hào)位} 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
*/

3 數(shù)組是相同數(shù)據(jù)類型的依次存儲(chǔ)

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

#include void printArr(short arr[],int len){    for(int i=0;iprintf("%d ",*(arr+i));
    }    printf("
");
}int main(){
    short arr[] = {1,3,2};    int len = sizeof arr / sizeof *arr;
    printArr(arr,len);
}

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

#include int main(){    enum Nm{LOSS,TIE,WIN}nm; // 實(shí)質(zhì)是一個(gè)整型,成員只是可能的右值(符號(hào)常量)的枚舉
    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)符號(hào)常量?jī)?nèi)聚為一組,相對(duì)于#define,枚舉對(duì)數(shù)據(jù)的描述性更清晰。

5 共用體成員的起始地址相同,共用一塊內(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)體來(lái)描述:

#include #include #define MAXPARTS 12struct Parts{ // 零件
int cost;char supplier[12];char unit[12] ;
};struct Assembly{ // 裝配件
int n_parts;struct {
char partno[12];
short quan;
}parts[MAXPARTS];
};struct Inventory{ // 存貨類型,或是零件,或是裝配件
char partno[10];int quan;enum{PART,ASSEMBLY}type; // 存貨類型
union {struct Parts parts;
struct Assembly assembly;
}info;
};int main(){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;
}

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

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

#include int main()
{    struct demo{char a; short b;int c;} abc; // 成員相對(duì)于基址偏移,字節(jié)對(duì)齊
    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();
}

7 位域是對(duì)整型數(shù)據(jù)的按位處理

(一次可以處理n個(gè)位,1<=n<=整形長(zhǎng)度)

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

#include void printBinM(unsigned int n){    for(int i=31;i>=0;i--)        printf("%d",(n & 1<>i);    printf("
");
}struct Bf{    
    unsigned a:3;    
    unsigned b:4;    
    unsigned c:5;
}bf;int main(){
    bf.a =1;
    bf.b=15;
    bf.c=3;    int *p = (int*)&bf; // 505
    printf("%d
",*p);
    printBinM(*p);//00000000000000000000000111111001
    getchar();
}

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

#include void printBinM(unsigned int n){    for(int i=31;i>=0;i--)        printf("%d",(n & 1<>i);    printf("
");
}int main(){    struct Bf{    
        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();
}

原文標(biāo)題:7 位域是對(duì)整型數(shù)據(jù)的按位處理

文章出處:【微信公眾號(hào):一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅

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

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137158
  • Doubler
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

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

    關(guān)注

    0

    文章

    236

    瀏覽量

    13637

原文標(biāo)題:7 位域是對(duì)整型數(shù)據(jù)的按位處理

文章出處:【微信號(hào):yikoulinux,微信公眾號(hào):一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    二進(jìn)制詳解

      Binary-Coded-Decimal,二進(jìn)制編碼的十進(jìn)制碼。  這種編碼僅僅使用4二進(jìn)制數(shù)來(lái)表示十進(jìn)制數(shù)中的0~9十個(gè)數(shù)碼。
    發(fā)表于 04-06 23:55

    labview編程模擬十進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換過(guò)程

    模擬十進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換過(guò)程,以LED來(lái)模擬各個(gè)二進(jìn)制位,并能以動(dòng)畫方式模擬計(jì)數(shù)的過(guò)程。 選擇手動(dòng)方式時(shí),將8個(gè)LED變成滑動(dòng)條中數(shù)字的二進(jìn)制(基數(shù)2)表示。例如,如果滑動(dòng)條設(shè)置為
    發(fā)表于 12-07 22:20

    二進(jìn)制

    二進(jìn)制   二進(jìn)制與十進(jìn)制的區(qū)別在于數(shù)碼的個(gè)數(shù)和進(jìn)位規(guī)律有很大的區(qū)別,顧名思義,二進(jìn)制的計(jì)數(shù)規(guī)律為逢二進(jìn)一,是以2為基數(shù)的計(jì)數(shù)體制。10這
    發(fā)表于 04-06 23:48 ?8212次閱讀
    <b class='flag-5'>二進(jìn)制</b>

    12二進(jìn)制計(jì)數(shù)器

    12二進(jìn)制計(jì)數(shù)器
    發(fā)表于 09-16 15:56 ?6485次閱讀
    12<b class='flag-5'>位</b><b class='flag-5'>二進(jìn)制</b>計(jì)數(shù)器

    二進(jìn)制編碼和二進(jìn)制數(shù)據(jù)

    二進(jìn)制編碼和二進(jìn)制數(shù)據(jù)   二進(jìn)制編碼是計(jì)算機(jī)內(nèi)使用最多的碼制,它只使用兩個(gè)基本符號(hào)"0"和"1",并且通過(guò)由這兩個(gè)符號(hào)組成的
    發(fā)表于 10-13 16:22 ?4808次閱讀

    二進(jìn)制電平,什么是二進(jìn)制電平

    二進(jìn)制電平,什么是二進(jìn)制電平 在二進(jìn)制數(shù)字通信系統(tǒng)中,每個(gè)碼元或每個(gè)符號(hào)只能是“1”和“0”兩個(gè)狀態(tài)之一。若將每個(gè)碼元可能取的狀態(tài)增
    發(fā)表于 03-17 16:51 ?2365次閱讀

    二進(jìn)制加法程序【匯編版】

    二進(jìn)制加法程序【匯編版】二進(jìn)制加法程序【匯編版】二進(jìn)制加法程序【匯編版】二進(jìn)制加法程序【匯編版】
    發(fā)表于 12-29 11:02 ?0次下載

    二進(jìn)制邏輯運(yùn)算詳解

    二進(jìn)制運(yùn)行詳解
    發(fā)表于 02-14 16:56 ?13次下載

    C語(yǔ)言編程二進(jìn)制位操作符

    C語(yǔ)言編程二進(jìn)制位操作符
    發(fā)表于 03-30 14:09 ?6次下載

    3二進(jìn)制計(jì)數(shù)器

    基于VHDL的EDA實(shí)驗(yàn)---3二進(jìn)制計(jì)數(shù)器
    發(fā)表于 11-08 17:45 ?1次下載

    函數(shù)轉(zhuǎn)換BCD編碼二進(jìn)制數(shù)為整型數(shù)

    BCD碼亦稱二進(jìn)碼十進(jìn)數(shù)或-十進(jìn)制代碼。用4二進(jìn)制數(shù)來(lái)表示1
    的頭像 發(fā)表于 03-14 10:15 ?6571次閱讀

    二進(jìn)制與十進(jìn)制數(shù)對(duì)照顯示實(shí)驗(yàn),十進(jìn)制二進(jìn)制對(duì)照

    二進(jìn)制與十進(jìn)制數(shù)對(duì)照顯示實(shí)驗(yàn),十進(jìn)制二進(jìn)制對(duì)照 關(guān)鍵字:CD4040,CD4511,數(shù)碼管
    的頭像 發(fā)表于 09-20 18:26 ?2877次閱讀

    浮點(diǎn)數(shù)轉(zhuǎn)換為二進(jìn)制存儲(chǔ)

    浮點(diǎn)數(shù)轉(zhuǎn)換為二進(jìn)制存儲(chǔ)根據(jù)IEEE754標(biāo)準(zhǔn),單精度f(wàn)loat類型使用32比特存儲(chǔ),其中1表示符號(hào),8表示指數(shù),23表示尾數(shù);雙精度doubl
    發(fā)表于 11-26 11:21 ?52次下載
    浮點(diǎn)數(shù)轉(zhuǎn)換為<b class='flag-5'>二進(jìn)制</b>存儲(chǔ)

    C語(yǔ)言常見的二進(jìn)制位的變換操作

    運(yùn)算是一種底層的運(yùn)算,往往比我們普通的運(yùn)算要快上許多許多 運(yùn)算是最高效而且占用內(nèi)存最少的算法操作,執(zhí)行效率非常高 運(yùn)算操作的是二進(jìn)制數(shù),會(huì)擁有一些
    發(fā)表于 07-01 12:38 ?2131次閱讀
    C語(yǔ)言常見的<b class='flag-5'>二進(jìn)制位</b>的變換操作

    二進(jìn)制編碼器工作原理 如何選擇二進(jìn)制編碼器

    編碼器通常有多個(gè)輸入端(通常為2的n次方個(gè),其中n是編碼器的位數(shù)),和一個(gè)或多個(gè)輸出端。每個(gè)輸入端對(duì)應(yīng)一個(gè)二進(jìn)制位,而輸出端則表示輸入的二進(jìn)制值。 優(yōu)先編碼器 : 優(yōu)先編碼器是一種特殊的二進(jìn)制編碼器,它在多個(gè)輸入信號(hào)同時(shí)
    的頭像 發(fā)表于 11-06 09:44 ?967次閱讀
    主站蜘蛛池模板: 青青热久久综合网伊人| 国产精品香蕉视频在线| 国产人成无码视频在线观看| 男宿舍里的呻吟h| 亚洲乱亚洲乱妇在线观看| 俄罗斯videosbest8| 免费人成网站永久| 一个人看的HD免费高清视频| 国产伦精品一区二区三区免费| 皮皮在线精品亚洲| 18video性欧美19sex高清| 精品国产mmd在线观看| 午夜理伦片免费| 俄罗斯呦呦| 热久久视久久精品18| 99久女女精品视频在线观看| 久久是热频国产在线| 亚洲人成影院在线播放| 国产久久re6免费热在线| 三叶草未满十八岁| 成人国产在线视频| 亲胸吻胸添奶头GIF动态图免费| 2012中文字幕手机在线| 久久本道久久综合伊人| 亚洲人成色777777老人头| 国产啪精品视频网免费| 午夜福利体检| 国产99小视频| 少妇无码太爽了视频在线播放| 成人免费毛片观看| 秋霞鲁丝片Av无码| 把极品白丝班长啪到腿软| 欧美视频毛片在线播放| a亚洲在线观看不卡高清| 免费无遮挡又黄又爽网站| 97国内精品久久久久久久影视| 毛片免费在线视频| 69日本人xxxx16—18| 猫咪www958ii| 97视频免费观看2区| 男女无遮挡吃奶gift动态图|