二、變量(例4)

#include <stdio.h>
int main()
{
    int iV1;
    int iV2=-10;
    unsigned uV6=33;
    char szV3='a';
    float fV4;
    long double dV5=3.14;
    
    printf("iV1:%p iV2:%p szV3:%p fV4:%p dV5:%p\n",
            &iV1,&iV2,&szV3,&fV4,&dV5);
    //正常情況:內存空間的分配一定是由低到高
    //這裏看到的情況是反過來,函數棧的結構:後進先出
    
    printf("SizeLen:\n 3.14:%d 314:%d \"abcdefg\":%d iV1+szV3+dV5:%d\n",
            sizeof(3.14),sizeof(314),sizeof("abcdefg"),sizeof(iV1+szV3+dV5));
    
    printf("%d %u\n",iV2+uV6, uV6+iV2);//雖然打印值正常,但不一定代表表達式是int類型,
    //具體是什麼類型 ??? 受到PRINTF的格式說明干擾,內部將unsigned又變成%d明文要求的類型 
    //C裏默認(隱性的)類型轉換:由低字長轉向高字長。如果字長相等,則由數值範圍上限小的向大的轉換
  
   //01101110=0*2^0+1*2^1+1*2^2+1*2^3+0*2^4+1*2^5+1*2^6=110 -->-110
   //有符號類型最高位是符號位,0爲正,1爲負
   //11101110  XXX
   //01101110 -> 10010001 +1 -> 10010010 
   //有符號整型數是以補碼的方式存儲的:正數的補碼是它本身,負數的補碼是它的正數全部取反再加1,再補上負數的符號位1
   //char:-128~+127 :-0 +0   將-0用來表示多一個數,-1,-128??


   //unsigned:10010010=18+2^7=146  這裏沒有標誌位


   //00101110 <<1=01011100 左移1位之後變大了2倍 -->左移n位相當於*2^n
   //00101110 >>1=00010111 右移1倍這後變成了2倍 -->右移n位相當於/2^n

}


發佈了26 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章