C语言_int和char之间的转换

文章详细阐述了在C语言中int和char类型之间的转换规则,包括char转int遵循ASCII码,以及int转char时的字节截断现象。在计算过程中,char型变量会先转换为int进行运算,避免了直接字符拼接。示例代码展示了转换和运算过程,并提示了打印时可能出现的字节截断问题及对应的ASCII字符显示。
摘要由CSDN通过智能技术生成

在C语言中,经常会发生int和char之间的自动转换,那么其间会有怎样的规则呢?我们可以看看下面的源代码。

/** 
 *  int 和 char 之间的转换:
 *  这里涉及到 ASCII 码,
 *  ASCII 码使用指定的 7位 或 8位 二进制数组合来表示 128 或 256 种可能的字符。
 *  我们可以先到书中或者网上查看ASCII字符代码表, 以便更好的理解这些内容。
 *
 *
 *  char转换为int的规则: 按照ASCII字符代码表转换成int的值。
 *
 *
 *  int转换为char的规则:
 *  C语言中int是四个字节, char是1个字节, 占字节多的int型向字节少的char型强制类型转换的原理就是字节截断。 
 *  转换时系统会自动删除高位的三个字节, 只留下低位的1个字节(1Byte=8bit), 这就是int型转换char型的时候可能丢失数据的原因。
 *
 *
 *  char型变量参与加减乘除的时候会先按照ASCII字符代码表转换成int的值。
 *  例如: char型变量与char型变量相加的时候, 并不是直接拼接成字符串, 而是先都转换成int的值, 然后两个int的值相加。
 */
void int2char() {
    char a = 120;
    char b = 120;
    char c;
    // i=2400=0b100101100000。
    int i = (a+b)*10;
    // j=96, 十进制数值96 对应着 字符 '`' 。
    int j = 0b01100000;
    // 截取i的低位的1个字节(1Byte=8bit), 其值跟j的值相等。
    c = i;
    /**
     *  注: int型变量按char格式打印, 或者 char型变量按int格式打印, 都是参照ASCII字符代码表的。
     *  而且, int型变量按char格式打印的时候会进行字节截断, 因此输出的值有可能变小。
     *  区间 [128, 255] 的所有整数 按char格式打印出来的字符都是 '?' 。
     */
    printf("|1  %c  %c  %c  %c  %c  |\n", a, b, c, i, j);
    printf("|2  %d  %d  %d  %d  %d  |\n", a, b, c, i, j);
}

运行输出结果如下:

|1  x  x  `  `  `  |

|2  120  120  96  2400  96  |

最后附贴一张ASCII字符代码表:

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值