5

getchar() 和 putchar() 的原型是:

int getchar(无效);

int putchar(int c);

如其原型所示,getchar() 函数被声明为返回一个整数。但是,您可以像通常所做的那样将此值分配给一个 char 变量,因为该字符包含在低位字节中。(高位-order 字节通常为零。)

与 putchar() 的情况类似,即使它被声明为采用整数参数,您通常也会使用字符参数来调用它。只有其参数的低位字节实际输出到屏幕。

高位字节和低位字节是什么意思?

4

2 回答 2

11

在 C 中,an 的大小由int实现定义,但通常为 2 或 4 个字节。高位字节将是包含该值最大部分的字节。低位字节将是包含该值的最小部分的字节。例如,如果您有一个 16 位的int,并且值为 5,243,您可以将其以十六进制写为 0x147B。高位字节为 0x14,低位字节为 0x7B。Achar只有 1 个字节,所以它总是包含在最低位字节中。当以十六进制(从左到右的方式)写入时,低位字节将始终是最右边的 2 位数字,而高位字节将是最左边的 2 位数字(假设它们将所有字节写出,包括前导 0)。

于 2017-11-05T02:17:38.607 回答
4

我认为最好的类比是看十进制数。

尽管这不是字面上的工作原理,但为了这个类比的目的,让我们假设 achar代表一个十进制数字,而 anint代表四个十进制数字。如果您有char带有某个数值的 a,您可以将其存储char在 a 中,方法是int将其写为整数的最后一位,在前面用三个零填充。例如,该值7将表示为0007。在数值上,char7int0007彼此相同,因为我们int用零填充了 。的“低位数字”int将是最右边的那个,它具有 value 7,而 的“高位字节”int将是其他三个值,它们都是零。

实际上,在大多数系统上,achar表示单个字节(8 位),而 anint由四个字节(32 位)表示。您可以将 a 的值填充char到 an中,方法int是让三个高位字节都保存值 0,而低位字节保存char's 值。the 的低位字节int有点像我们上面类比中的 one's 位置,而 the 的高位字节int有点像上面类比中的数十、数百和数千位。

于 2017-11-05T02:17:49.237 回答