// 数据类型转换的内存原理.cpp : Defines the entry point for the console application.
//
//1个字节就为8位十六进制
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
/*
低字节往高字节 按符号位去填充
*/
int main1(int argc, char* argv[])
{
char ch=1;
// 0000 0001
int num=ch;
// 0000 0000 0000 0000 0000 0000 0000 0001
//按符号位填充
printf("%p,%p\n",&ch,&num);
return 0;
}
void main2()
{
char ch=-1;
//原码:1000 0001
//反码:1111 1110 原码取反符号位不要变
//补码:1111 1111 反码+1
//: F F
int num=ch;
//原码:1000 0000 0000 0000 0000 0000 0000 0001
//反码:1000 1111 1111 1111 1111 1111 1111 1110
//补码:1111 1111 1111 1111 1111 1111 1111 1111
//: F F F F F F F F
printf("%d,%d\n",ch,num);
printf("%p,%p\n",&ch,&num);
}
//以上都是有符号的数据
void main3()
{
//大数据填充小数据就会有误 int to char 就会保证数据的不正确
unsigned char data1=255+1;
printf("我有%d万元\n",data1);
//printf("我有%d万元\n",data+1); //这是不会溢出的
//%d最大输出的值是int范围所以不溢出
}
void main4()
{
unsigned char ch=1;
// 0000 0001
unsigned int i=ch;
// 0000 0000 0000 0000 0000 0000 0000 0001
//无符号的CPU直接填充
printf("%d,%d\n",ch,i);
}
void main()
{
unsigned int i=-1; //赋值号会将二进制直接赋值给i
//int i=4294967295;
printf("%d\n",i);//-1按照%d就会输出负数所以就是-1
printf("%u\n",i);//无符号直接输出int的最大值
for (int a=1; a<i; a++) //如果i++就会变成0
{
system("calc");
}
}
//
//1个字节就为8位十六进制
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
/*
低字节往高字节 按符号位去填充
*/
int main1(int argc, char* argv[])
{
char ch=1;
// 0000 0001
int num=ch;
// 0000 0000 0000 0000 0000 0000 0000 0001
//按符号位填充
printf("%p,%p\n",&ch,&num);
return 0;
}
void main2()
{
char ch=-1;
//原码:1000 0001
//反码:1111 1110 原码取反符号位不要变
//补码:1111 1111 反码+1
//: F F
int num=ch;
//原码:1000 0000 0000 0000 0000 0000 0000 0001
//反码:1000 1111 1111 1111 1111 1111 1111 1110
//补码:1111 1111 1111 1111 1111 1111 1111 1111
//: F F F F F F F F
printf("%d,%d\n",ch,num);
printf("%p,%p\n",&ch,&num);
}
//以上都是有符号的数据
void main3()
{
//大数据填充小数据就会有误 int to char 就会保证数据的不正确
unsigned char data1=255+1;
printf("我有%d万元\n",data1);
//printf("我有%d万元\n",data+1); //这是不会溢出的
//%d最大输出的值是int范围所以不溢出
}
void main4()
{
unsigned char ch=1;
// 0000 0001
unsigned int i=ch;
// 0000 0000 0000 0000 0000 0000 0000 0001
//无符号的CPU直接填充
printf("%d,%d\n",ch,i);
}
void main()
{
unsigned int i=-1; //赋值号会将二进制直接赋值给i
//int i=4294967295;
printf("%d\n",i);//-1按照%d就会输出负数所以就是-1
printf("%u\n",i);//无符号直接输出int的最大值
for (int a=1; a<i; a++) //如果i++就会变成0
{
system("calc");
}
}