沈阳生活问答网

关于打印%x出现ffffff的问题

发布时间:2019-09-17

printf("%02x\n", (unsigned char)s->c[0]);
打印十六进制时需要确定位数长短,并且注意类型。默认类型为signed,意味着有正负之分,负数的十六进制表达很难看的。

回复:

printf("%x\n",0xcffffff3>>2);中的0xcffffff3没有赋给变量,编译器把它按其大小解释为无称号数;而int f = 0xcffffff3;中的f是int型,0xcffffff3由于最高位是1,就按负数取补存放了。无论正数负数,右移位时符号位是跟随的,所以造成结果不同。

回复:

char *p就意味着是p[0]的类型是signed char, 有符号数按照补码存的, 而且所有整数类型在运算时都会扩展为32位的长度, 有符号数的扩展就是符号位扩展, 符号位为1, 所以就扩展了24个1, 也就是6个f
如果是声明为unsigned char *p, 那就是0扩展, 不会多6个f

回复:

char *p就意味着是p[0]的类型是signed char, 有符号数按照补码存的, 而且所有整数类型在运算时都会扩展为32位的长度, 有符号数的扩展就是符号位扩展, 符号位为1, 所以就扩展了24个1, 也就是6个f 如果是声明为unsigned char *p, 那就是0扩展, 不...

回复:

printf();函数只识别第一个参数,即格式字符串,对于后一个参数,如你不指定,则当作32位的int来处理. 此时进行符号扩展,变成32位,如上所得. printf("%x\n", (unsigned char)ch);同样是上面的原因.把他当作signed char定义,可是输出时转化为unsigned...

回复:

printf("%02x\n", (unsigned char)s->c[0]); 打印十六进制时需要确定位数长短,并且注意类型。默认类型为signed,意味着有正负之分,负数的十六进制表达很难看的。

回复:

printf("%x\n",0xcffffff3>>2);中的0xcffffff3没有赋给变量,编译器把它按其大小解释为无称号数;而int f = 0xcffffff3;中的f是int型,0xcffffff3由于最高位是1,就按负数取补存放了。无论正数负数,右移位时符号位是跟随的,所以造成结果不同。

上一篇:你q多少 我想加你 下一篇:山东淄博光伏发电一平米价格多少

返回主页:沈阳生活问答

本文网址:http://kekehe.cn/view-209008-1.html
信息删除