PX-31-数据类型转换的内存原理

1. 低字节的数据往高字节数据转换,符号按照符号来填充

//低字节的数据往高字节数据转换,符号按照符号来填充
void main1()
{
    char ch = 1;
    //0000 0001
    int num = ch;
   //// 0000 0000 0000 0000 0000 0000 0000 0001
   //符号位填充

    printf("%p,%p", &ch, &num);
    getchar();

}

 

void main2()
{
    char ch = -1;
    //1000 0001         原码
    //1111 1110  反码      +1
    //1111 1111 补码  f f


    int num = ch;
    // 1000 0000 0000 0000 0000 0000 0000 0001       原码
    // 1111 1111 1111 1111 1111 1111 1111 1110 反码
    // 1111 1111 1111 1111 1111 1111 1111 1111 补码 fffffff

    printf("%d,%d", ch, num);
    printf("%p,%p", &ch, &num);

    getchar();
}

 

2.高字节向低字节转换

void main3()
{

    //大数据int  to char 会发生数据丢失
    unsigned char data = 255+1;

    printf("张喜有%d万元", data);
    getchar();
}

溢出的原理:数据超过字节范围而被截取的原理;

 

3.无符号的

void main4()
{

    //无符号,一律填充0
    unsigned char ch = 1;     //0000 0001
    unsigned int num = ch;
    //0000 0000 0000 0000 0000  0000 0000 0000 0000 0001

}

 

4.

void main()
{
    // 1111 1111 1111 1111 1111 1111 1111 1111    -1二进制
    //num,      1111 1111 1111 1111 1111 1111 1111 1111
    //4294967295

    unsigned int num = -1;    //0-UINTMAX   打开4294967295次 calc  
    printf("%u", num);

    for (int i = 0; i < num;i++)
    {
        system("calc");

    }
    getchar();

}

 

 

 

 

 

 

 代码:

#include<stdio.h>
#include<stdlib.h>
//低字节的数据往高字节数据转换,符号按照符号来填充
void main1()
{
    char ch = 1;
    //0000 0001
    int num = ch;
   //// 0000 0000 0000 0000 0000 0000 0000 0001
   //符号位填充

    printf("%p,%p", &ch, &num);
    getchar();

}

void main2()
{
    char ch = -1;
    //1000 0001         原码
    //1111 1110  反码      +1
    //1111 1111 补码  f f


    int num = ch;
    // 1000 0000 0000 0000 0000 0000 0000 0001       原码
    // 1111 1111 1111 1111 1111 1111 1111 1110 反码
    // 1111 1111 1111 1111 1111 1111 1111 1111 补码 fffffff

    printf("%d,%d", ch, num);
    printf("%p,%p", &ch, &num);

    getchar();
}

void main3()
{

    //大数据int  to char 会发生数据丢失
    unsigned char data = 255+1;

    printf("张喜有%d万元", data);
    getchar();
}

void main4()
{

    //无符号,一律填充0
    unsigned char ch = 1;     //0000 0001
    unsigned int num = ch;
    //0000 0000 0000 0000 0000  0000 0000 0000 0000 0001

}

void main()
{
    // 1111 1111 1111 1111 1111 1111 1111 1111    -1二进制
    //num,      1111 1111 1111 1111 1111 1111 1111 1111
    //4294967295

    unsigned int num = -1;    //0-UINTMAX
    printf("%u", num);

    for (int i = 0; i < num;i++)
    {
        system("calc");

    }
    getchar();

}

 

posted @ 2016-12-13 19:57  silvercell  阅读(1783)  评论(0)    收藏  举报