char型可以用%d输出,而int型数据不能用%c输出??

2024-11-22 07:05:51
推荐回答(5个)
回答(1):

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

回答(2):

在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;
}

运行结果如下:

回答(3):

在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;
}

回答(4):

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 的旁边放了什麼.

回答(5):

int型数据超过[0,127]这个范围就不能用%c输出
当一个int型数据在[0,127]这个范围内,它不一定能用%c输出
ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备。
是不可打印的 意思就是不可输出!!!!!!!!!!!