[整理]C結構實現位段(bit field)

來源:互聯網
上載者:User

標籤:blog   http   io   html   div   re   

#include <stdio.h>#include <string.h>typedef struct A{int a:5;int b:3;unsigned c:8;unsigned d:8;} Type_A;/* VS2010, Windows XP, Debug模式下運行 */int main(void){   struct A a;char s[]="12345678";printf( "%d\n",sizeof(Type_A) );//4printf("%d\n",sizeof(a));//4memcpy(&a,s,3);printf("%d\n",a.a);//‘1‘的低位 -15printf("%d\n",a.b);//‘1‘的高位 1printf("%d\n",a.c-‘0‘);//‘3‘ 51printf("%d\n",a.d-‘0‘);//‘4‘ 52return 0;}

‘1‘(49)的二進位 00110001,
a.a=10001 (-15)
a.b=001     (1)

由A的定義已知a.a(10001)是代表一個有符號的int型,

先執行符號位擴充得到11110001,

再減一得到11110000,

再取反得到10001111,就是-15的源碼了.
所以a.a的值為-15, 同理,a.b為1。

 

參考:

http://www.cnblogs.com/bigrabbit/archive/2012/09/20/2695543.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.