简单聊聊printf()中的转换:
下面是我根据一道题而引起的思考,并由自身理解所提出的解释。
如果出现错误,请在评论区下讨论,谢谢各位看客~~
int main()
{
//需要清楚unsigned char 的范围为 0 ~ 255
unsigned char a = 200;
unsigned char b = 100;
unsigned char c = 0;
c = a + b;
//c是先将300对应的二进制码进行截断,然后存储在内存中。
//此时c的二进制码为0010 1100 转换为十进制为44
printf("%d %d", a + b, c);// 300 44
//printf 是先将表达式的值的二进制取出,再根据格式输出符来对二进制进行整型提升或其它操作
//printf 中的 a + b 是将 a, b 中的200 和 100 取出来 加起来为300
//此时的a + b 对应的二进制码根据 %d ,在进行截断后并没有对码本身造成什么影响
return 0;
}
如何打印地址:
我们想要将变量在内存中的地址以十六进制的方式打印出来。
//可以使用int*来将double*进行强转类型,用来限制打印的字节大小(地址)
double p = 1;
printf("%p\n", ((int*)&p));
//这里针对的是p1本身的地址,因为p1是指针,需要多进行一次解引用
const double* p1 = &p;
printf("%p", *((int*)p1));