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(); }

浙公网安备 33010602011771号