printf总是会把一个char提升为int么?
- C/C++ code
int main() { char a=0x7f; char b=~a; printf("%x\n",b); return 0; }打印的结果是0xffffff80
我希望打印的结果是0x80.看起来printf把char类型的b提升成了整型数。
有没有可以不做整形提升(我知道整形提升的知识,在c99的标准里面),直接打印一个0x80.;
[解决办法]
- C/C++ code
#include <stdio.h>int main(int argc,char *argv[]) { char a=0x7f; char b=~a; printf("%2x\n",b&0xff); return 0; }
[解决办法]
- C/C++ code
int main() { char a=0x7f; char b=~a; printf("%x\n",(b&0x0ff)); return 0; }
[解决办法]
ps:提神宽度的不是printf,而是位操作~
[解决办法]
说错了,确实是printf的%x造成的,不过高字节上有位操作痕迹,估计是栈的内存造成的~
[解决办法]
等有空去研究下再说~
[解决办法]
printf("%.02x\n",b);
[解决办法]
[解决办法]
- C/C++ code
[User:root Time:16:20:26 Path:/home/liangdong/c]$ ./output 80[User:root Time:16:20:27 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* const argv[]) { char n = 0x80; printf("%02x\n", (unsigned char)n); return 0;}