来自教科书:
所以我知道一个字节有 8 位,右位移向左边添加零位,并从右边弹出位。但是如何使用上面的例子来输出一个字节呢?我本来期望:
putchar(b >> 8)
putchar(b >> 7)
putchar(b >> 6)
etc.
因为我假设 putchar 输出弹出的位?
putchar 打印对应于给定整数的 ascii 字符。
putchar(0x41)
将整数 0x41 转换为 an unsigned char
(大小为一个字节)并打印出对应于 0x41 的 ascii 字符(即“A”)。
这里要实现的关键是 putchar 只查看低 8 位,即putchar(0x41)
做putchar(0xffffff41)
同样的事情。
现在让我们看看当你将某些东西传递给上面的函数时会发生什么。
outbyte(0x41424344);
首先它将 b 位移 24 位,然后在该值上调用 putchar
0x41424344 << 24; //0x00000041
putchar(0x00000041); //A
然后它将 b 位移 16 位,然后在该值上调用 putchar
0x41424344 << 24; //0x00004142
putchar(0x00004142); //B
等等
这是在行动:http: //ideone.com/3xeFSx