char型可以用%d输出,而int型数据不能用%c输出??
5个回答
展开全部
int型数据超过[0,127]这个范围就不能用%c输出。
当一个int型数据在[0,127]这个范围内,它不一定能用%c输出。
ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备,是不可打印的 意思就是不可输出。
扩展资料:
在C中,char型是一字节整型,int是四字节(早期的是二字节)整型,它们是可以通用的,甚至一些C的库函数如getc、getchar等在接收键盘输入的字符时返回的就是int型值而并非char型值。char型在%d控制下按int型输出时符号位将被扩展至总长度为四字节,而int型在%c控制下按char型输出时,将从低位截取一字节而放弃前三个字节。
参考资料来源:百度百科-INT
展开全部
在C中,char型是一字节整型,int是四字节(早期的是二字节)整型,它们是可以通用的,甚至一些C的库函数如getc、getchar等在接收键盘输入的字符时返回的就是int型值而并非char型值。char型在%d控制下按int型输出时符号位将被扩展至总长度为四字节,而int型在%c控制下按char型输出时,将从低位截取一字节而放弃前三个字节。下面的代码可以佐证此情况:
#include "stdio.h"
int main(int argc,char *argv[]){
int a=0xF978CA41;
char c='a',d=-2;
printf("a = %c\n",a);//这里只截取a的最低字节0x41,对应字符是A
printf("c = %d\n",c);//这里将c的值'a'(即97)符号位扩展后输出97
printf("d = %d\n",d);//这里将d的值-2符号位扩展后输出-2
return 0;
}
运行结果如下:
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在C中,char型是一字节整型,int是四字节(早期的是二字节)整型,它们是可以通用的,甚至一些C的库函数如getc、getchar等在接收键盘输入的字符时返回的就是int型值而并非char型值。char型在%d控制下按int型输出时符号位将被扩展至总长度为四字节,而int型在%c控制下按char型输出时,将从低位截取一字节而放弃前三个字节。下面的代码可以佐证此情况:
#include "stdio.h"
int main(int argc,char *argv[]){
int a=0xF978CA41;
char c='a',d=-2;
printf("a = %c\n",a);//这里只截取a的最低字节0x41,对应字符是A
printf("c = %d\n",c);//这里将c的值'a'(即97)符号位扩展后输出97
printf("d = %d\n",d);//这里将d的值-2符号位扩展后输出-2
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-13
展开全部
char 占 1byte, 范围-128~127.
int 早期占 2 byte, 范围-32768~32767, 近年来占4 byte, 范围-2G~+2G-1.
对 char c; int i; ...
printf("%c, %d", c, i); 是正常用法.
printf("%c, %d", (char)i, (int)c ); 是转型用法.
转型时 (int)c 是放宽, 没问题. (char)i 是缩小, 若i在 -128~+127就没问题, 否则会切除高位的bit.
printf("%c, %d", i, c ); 是错误用法:
对 i 用 %c时, printf抓最低位的byte,
在低位排前(little endian)的机器上, 效果上等於是拿 (char)i 去印.
在高位排前(big endian)的机器上就乱掉了.
对 c 用 %d时, printf会抓个4 byte, 结果要碰运气. 因为无法预测在内存中, c 的旁边放了什麼.
int 早期占 2 byte, 范围-32768~32767, 近年来占4 byte, 范围-2G~+2G-1.
对 char c; int i; ...
printf("%c, %d", c, i); 是正常用法.
printf("%c, %d", (char)i, (int)c ); 是转型用法.
转型时 (int)c 是放宽, 没问题. (char)i 是缩小, 若i在 -128~+127就没问题, 否则会切除高位的bit.
printf("%c, %d", i, c ); 是错误用法:
对 i 用 %c时, printf抓最低位的byte,
在低位排前(little endian)的机器上, 效果上等於是拿 (char)i 去印.
在高位排前(big endian)的机器上就乱掉了.
对 c 用 %d时, printf会抓个4 byte, 结果要碰运气. 因为无法预测在内存中, c 的旁边放了什麼.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-13
展开全部
int型数据超过[0,127]这个范围就不能用%c输出
当一个int型数据在[0,127]这个范围内,它不一定能用%c输出
ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备。
是不可打印的 意思就是不可输出!!!!!!!!!!!
当一个int型数据在[0,127]这个范围内,它不一定能用%c输出
ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备。
是不可打印的 意思就是不可输出!!!!!!!!!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询