正文

[004] 整形变量以字符输出时的范围2006-02-10 23:54:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/10053.html

分享到:

    字符变量在计算机内占一个字节,而整形变量占两个字节,因此整形变量在可输出字符的范围内(ASCII码为0~255这间的字符)是可以与字符数据互相转换的.如果在此范围外,则不能代替.


#include <stdio.h>
main()
{
    int a, b;
    printf("请输入两个整数 a, b:\n");
    scanf("%d,%d",&a,&b);
    printf("按字符输出为:\n");
    printf("%c,%c\n",a,b);
    char c1, c2;
    c1 = a;
    c2 = b;
    printf("转换为字符型后按整数输出为:\n");
    printf("%d,%d\n",c1,c2);
}

运行结果:
========================================
请输入两个整数 a, b:
97,289↙
按字符输出为:
a,!
转换为字符型后按整数输出为:
97,33
========================================

c1,c2是字符型变量,只占一个字节,只能存放0~255范围内的整数,97为a的ASCII码,而289超过了255,所以只将b在内存中的低8位赋值绐c2 (b按字符输出时同理) , 289-255=33 而33为!的ASCII码.

Turbo C 把字符处理成带符号的整数。

######################################更正########################################

经网友指出, 做如下改正:

289-255=33显然是错误的, 应该是289-256=33。
从0~255共是256个,所以应该减去256而非255。
换成二进制就清楚了,289是100100001,按字符输出时取后8位00100001,即33。

阅读(4685) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册