数据在内存中的存储

//int a = 10;
//正数的源码,反码,补码相同
// 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010  源码
// 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010  反码
// 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010  补码
// 
// a=-10
// 负数的
// 1000 0000 0000 0000 0000 0000 0000 0000 0000 1010  源码
// 1111 1111 1111 1111 1111 1111 1111 1111 1111 0101  反码
// 1111 1111 1111 1111 1111 1111 1111 1111 1111 0110  补码
// 补码取反加1得源码
// 
//第一位为符号位
// 
//在内存中存放的是补码
// 
//cpu中只有加法器+(-x)
//大小端字节序
//#include<stdio.h>
//int main()
//{
//    //      11是高位字节         44是低位字节
//    int b = 0x11223344;//低---------------->高     地址
//    //                      11 22 33 44    叫大端字节序存储
//    //                      44 33 22 11    叫小端字节序存储
//    return 0;
//}
//写一个程序判断大小端
//#include<stdio.h>
//int main()
//{
//    int a = 1;
//    char* p = (char*)&a;//取a的第一个字节的地址
//    if (*p == 1)
//    {
//        printf("小端");
//    }
//    else
//    {
//        printf("大端");
//    }
//    return 0;
//}


//练习
//#include <stdio.h>
//int main()
//{
//    char a = -1;
//    //10000000 00000000 00000000 00000001//原
//    //11111111 11111111 11111111 11111110//反
//    //11111111 11111111 11111111 11111111//补
//    //存储在a中会发生截断
//    //a-11111111
//    //有符号位整形提升按照符号位提升
//    //11111111 11111111 11111111 11111111//补
//    //11111111 11111111 11111111 11111110//反
//     //10000000 00000000 00000000 00000001//原
//    signed char b = -1;
//    //b-11111111
//    unsigned char c = -1;
//    //c-11111111
//    //无符号位按0开始整形提升
//    printf("a=%d,b=%d,c=%d", a, b, c);//-1 -1 255
//    return 0;
//}
//正负数以补码的形式存储在数据中
//值为补码的值
//#include <stdio.h>
//int main()
//{
//    char a = -128;//1000000...0010000000(-128--127)有符号char      (0-255)无符号char  
//    //short int 通用
//    //a-10000000
//    //整形提升111111111111..1110000000
//    printf("%u\n", a);//%u以十进制打印无符号整数4294967168
// //%u 无符号三码相同
//    //%d为-128
//    return 0;
//}
//#include <stdio.h>
int main()
{
   //char a = 128;
   00000000 000000000000000010000000
   10000000-a
   提升
   //printf("%u\n", a);// 4294967168

   int i = -20;
   unsigned  int  j = 10;
   printf("%d\n", i + j);
   return 0;
}
//int main()
//{
//    char a[1000];//-128--127
//    int i;
//    for (i = 0; i < 1000; i++)
//    {
//        a[i] = -1 - i;
//    }
//    printf("%d", strlen(a));//找\0
//    //-1 -2 ...-128 127 126...1 0
//    //255
//    return 0;
//}

//#include <stdio.h>
//#include<windows.h>
unsigned char i = 0;
0-255
//int main()
//{
//    //for (i = 0; i <= 255; i++)
//    //{
//    //    printf("hello world\n");
//    //}//死循环
//    unsigned int i;
//for(i = 9; i >= 0; i--)
//{
//    printf("%u\n",i);
//}//死循环
9 8 ...0 2^32...
//sleep(10000);
//    return 0;
//}


//#include<stdio.h>
//int main()
//{
//    int a[4] = {1,2,3,4};//01 \00 00 00 02\ 00 00 00 03 00 00 00 04 00 00 00
//    int* ptr1 = (int*)(&a + 1);
//    int* ptr2 = (int*)((int)a + 1);//a的地址转化成int类型为16,16加1为17,
//    printf("%x,%x", ptr1[-1], *ptr2);//4   2 00 00 00
//    return 0;
//}

//浮点数在内存中的存储
#include<stdio.h>
int main()
{
    //s=0,e=-126,m=0.000000001001
    int n = 9;//0 0000000 000000001001//9的补码    打印原码
    float* pFloat = (float*)&n;
    printf("n的值为:%d\n", n);//9
    printf("*pFloat的值为:%f\n", *pFloat);//0.000000
    *pFloat = 9.0;//1001.0==1.0010*2^3
    //s=0 e=3,E=130,m=1.001
    //0 100000010 0010000000000000000
    printf("num的值为:%d\n", n);//1091567616
    printf("*pFloat的值为:%f\n", *pFloat);//9.000000
    return 0;
}

//任意浮点数都以v=(-1)^s*m*2^e存储;
// 5.5=101.1
// 科学计数法:1.011*2^2
// m=1.011;//不存储整数位
// 2^e=2^2;
//(-1)^s是符号位
//m为有效数字
//对于float类型的数e要加127
//double类型的数e要加1023

//#include<stdio.h>
//int main()
//{
//    //存
//    //s=0,e=2,E=2+127,m=1.011
//    float f = 5.5f;
//    //0 100000001 011000000000000000000
//
//    //取
//    //1.e不为全0或不为全1
//    //1.011000000000000000000*2^e
//    // 
//    //2.e为全0
//    //为接近0的数
//
//    //3.e全为1
//    //为无穷大的数
//    return 0;
//}


//浮点数不精确
// 不能用==来比较
//一般用abs(f-5.6)<0.0001

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值