二、变量(例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

}


你可能感兴趣的:(二、变量(例4))