C语言_int和char之间的转换

在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字符代码表:

C语言_int和char之间的转换_第1张图片

 

你可能感兴趣的:(IT_百科,IT_C语言和C++语言,IT_OC开发和swift开发,c语言)