在编程语言中,当数字(整数或实数字)被打印出来时,它们是否首先转换为表示数字的可读字符的代码,然后将代码解码为可读的字符?
例如,在C中,像printf这样的函数可以打印出一个整数变量a的值以供屏幕或文件。假设a的值为1。printf是否首先将数字1转换为数字0x31,这是字符1的ASCII代码,然后在输出中将0x31解码为字符1?
谢谢和问候!
发布于 2011-07-22 20:37:35
printf()使用"%d“打印规范执行您所说的前半部分。变量中的数字通常为1-补码二进制(尽管存在其他约定并已使用),而printf()中的代码确实将数字1转换为ASCII代码,通常以8位为单位。
它取决于输出设备,xterm,打印机,哑终端,什么-你,采取字节,并将他们变成某种光学可读的人。xterm将字节值0x31 (如果是在ASCII或UTF-8模式中)转换为某些位图,这取决于打印的字体和大小。传统的冰河期电传打字机会用“1”键机械地敲打纸张。
发布于 2011-07-22 20:38:30
一般是的。控制台的输出通常使用ASCII字符完成。BIOS/OS中的呈现引擎(取决于呈现的是哪些)侵入ASCII字符并设置要显示的适当像素。
从技术上讲,计算机只知道1's和0's。编译器编写代码将ascii值0x31转换为位。然后,呈现引擎获取该信息,并确定向显示发送哪些命令。显示器就是这样,用它来确定要亮哪些像素,以及如何点亮。在屏幕上显示字符的代码数量惊人。
发布于 2011-07-22 21:43:50
是。一直到0x31。C是否涉及将字节值0x31转换为表意符号,在屏幕上显示为像素?不是的。这个部分是在硬件中实现的,或者程序员可以假设它是硬件(在大多数现代情况下是系统软件)。
如果您想知道软件到底在哪里结束,那么它就是系统内存的区域,包含字符字节码,在物理上可以不是普通的RAM,而是视频硬件中的RAM或类似RAM的可寻址资源。(这是非常老的实现,在现在的全操作系统机器上,它是内存映射和软件/固件的5个方向。)
https://softwareengineering.stackexchange.com/questions/95280
复制相似问题