关于字符型变量和整形变量相互转换的问题
2016-09-26 20:06
351 查看
程序要求:用getchar()函数读入两个字符给c1,c2,然后分别用putchar()函数和printf()函数输出这两个字符。
在这个程序中,c1、c2无论是定义成字符型或者是整型都可以实现程序正确运行。说明在计算机内部,可以实现字符型变量和整型变量的正确转换,一切都是根据ASCII码表进行的。
但是如果是需要输出c1、c2的ASCII码,我们只能用printf()函数,而putchar()只能实现单个字符的输出;相比之下,在printf()函数中只要定义正确,可以输出任意类型的变量值。可以说,在一般程序中,printf()函数的应用也因此更加广泛。
在正常8位计算机中,我们可以实现字符型变量和整型变量在0-255以内对应ASCII码表的正确转换,如果整型变量超出255,则进行X-255的ASCII码表转换,其他情况可以以此类推。然而在我们使用的虚拟机中,我们只能进行7位以内的计算,也就是说,我们只能实现在0-127的ASCII码表的正确转换,除此之外的128-255一般情况下会输出乱码,超过255之后,进行X-255的ASCII码表转换,之后以此类推。
即在我们正常编写程序的时候,很可能出现的错误既不是语法错误也不是功能错误,这个时候,计算机内部结构的知识可能会给我们打开一扇窗。
在这个程序中,c1、c2无论是定义成字符型或者是整型都可以实现程序正确运行。说明在计算机内部,可以实现字符型变量和整型变量的正确转换,一切都是根据ASCII码表进行的。
但是如果是需要输出c1、c2的ASCII码,我们只能用printf()函数,而putchar()只能实现单个字符的输出;相比之下,在printf()函数中只要定义正确,可以输出任意类型的变量值。可以说,在一般程序中,printf()函数的应用也因此更加广泛。
在正常8位计算机中,我们可以实现字符型变量和整型变量在0-255以内对应ASCII码表的正确转换,如果整型变量超出255,则进行X-255的ASCII码表转换,其他情况可以以此类推。然而在我们使用的虚拟机中,我们只能进行7位以内的计算,也就是说,我们只能实现在0-127的ASCII码表的正确转换,除此之外的128-255一般情况下会输出乱码,超过255之后,进行X-255的ASCII码表转换,之后以此类推。
即在我们正常编写程序的时候,很可能出现的错误既不是语法错误也不是功能错误,这个时候,计算机内部结构的知识可能会给我们打开一扇窗。
相关文章推荐
- 关于字符型变量和整型变量相互转换的问题
- 关于int整形变量占有字节问题 面试有用
- 关于字符串与字节byte之前的相互转换问题
- 关于Json 数据与NSString 对象相互转换问题 。
- 关于编程时变量类型转换问题
- 关于时间戳和QDateTime相互转换的有关问题
- 关于时间戳和QDateTime相互转换的有关问题(转)
- Android 中java 关于字符串与整形转换的相关问题(Invalid Int)
- 按位进行整形和字符型变量的转换
- 整形与字符型之间的相互转换
- 关于JAVA中变量类型转换以及精度问题
- 关于不同的string间相互转换的问题
- 整形变量与字节数组的相互转换
- 关于时间戳和QDateTime相互转换的有关问题
- 关于String、date、Timestamp之间的相互转换问题
- 关于 swift 开发的变量或属性声明的建议(避免类型转换以及带来的强转崩溃问题)
- 关于JSON中字符串与java对象的相互转换问题
- [转]关于int整形变量占有字节问题
- 【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题
- 关于int类型指针和char类型指针相互转换问题