【2009年真题 12】 一个 C 语言程序在一台 32 位机器上运行。程序中定义了三个变量 x、y 和 z,其中 x 和 z 为 int 型,y 为 short 型。当 x = 127,y = -9 时,执行赋值语句 z = x + y 后,x、y 和 z 的值分别是______。
A. x=0000007FH, y=FFF9H, z=00000076H
B. x=0000007FH, y=FFF9H, z=FFFF0076H
C. x=0000007FH, y=FFF7H, z=FFFF0076H
D. x=0000007FH, y=FFF7H, z=00000076H
C 语言中的整型数据为补码形式,int 为 32 位,short 为 16 位,故 x、y 转换成十六进制为 0000007FH、FFF7H。执行 z = x + y 时,由于 x 是 int 型,y 为 short 型,需将短字长数据转换成长字长数据,称之为符号扩展。由于 y 的符号位为 1,故在 y 的前面添加 16 个 1,即可将 y 上升为 int 型,其十六进制形式为 FFFFFFF7H。最后执行加法,即 0000007FH + FFFFFFF7H = 00000076H 其中最高位的进位 1 自然丢弃。故选 D。
