上学期我上了一门操作系统课。我一点也不惊讶全班都是用C语言授课,但大量使用C语言似乎让班上的一些人很恼火。课程结束后,一些不喜欢这门语言的人提高了嗓门,说不用再用C语言编程是多么的快乐。这引发了学生(和老师)之间的一场小争论,最后一位老师给出了答案。他的答案是用C代码写的:

#include <stdio.h>

unsigned char output[] = {
0xe7, 0x3a, 0x1d, 0x2f, 0x01,
0x92, 0x42, 0x09, 0x48, 0x01,
0x92, 0x32, 0x09, 0x8e, 0x01,
0x92, 0x0a, 0x09, 0x48, 0x01,
0xe7, 0x73, 0xdd, 0x2f, 0x00,
};

int main() {
    unsigned char* wb;
    int i;
    for (wb = output; *wb; wb++) {

        if (*wb == 0x01) {
            printf("\n");
            continue;
        }

        for (i = 7; i >= 0; i--) {
            putchar((((*wb >> i) & 1) + 0x20));
        }
    }
    printf("\n");
    return 0;
}

这张照片:
!!!  !!!  !!! !    !!! !  ! !!!!
!  !  !  !    !     !  ! !  !
!  !  !   !!  !     !  !!   !!!
!  !  !     ! !     !  ! !  !
!!!  !!! !!!  !!!! !!! !  ! !!!!

这是我一生中见过的用C代码做的最酷的事情!!!
有人能解释一下这是怎么做到的吗?
[编辑:为清晰起见调整了缩进]

最佳答案

一个提示是,考虑数组output的二进制表示。这项技术出现的一个地方是在硬件寄存器中的位的控制,就像你在嵌入式系统中可能做的那样——这是一个C真正发光的地方。

关于c - 使用C中的未签名字符进行神奇打印,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19305379/

10-12 07:04