第28题  在下列声明中,不正确的是

­      A  char  a = 0x0;

­      B  short  b = 0127;

­      C  unsigned int  c = −200u;

­      D  long  d = 0L;

答案  C

解析   考查变量的定义及初始化。

A正确,定义char型变量a,先将int型十六进制常量0x0的值转换为char型再赋于a。

B正确,定义short型变量b,先将int型八进制常量0127的值转换为short型再赋于b。

C不正确,从二级考试层面来看,其用意是将一个负值赋于无符号变量,这是不妥当的,单凭这个负号就可挑出答案C,这也是命题者的意图。

D正确,定义long型变量d,将long型八进制常量0L的值直接赋于d。

知识点

① 十进制常量是以非0数字开头十进制数字序列,如1、23、625。

② 八进制常量由前缀数字0开头、后面可以紧跟(也可不跟)仅限数字0至7的序列,如0、012、0127,但0128、09不是八进制常量,也不是十进制常量,不是合法常量。

③ 十六进制常量由前缀0x或0X开头、后面必须紧跟十进制数字字母a(或A)至f(或F)的混合序列,a(或A)至f(或F)分别代表数值10至15,如0x0、0x12、0x1e2d、0X12A、0XB9CF。

④ 常量的基数,也就是通常说的几进制,取决于前缀。

⑤ 常量的类型取决于后缀。对二级考试而言,只需记住无后缀的为int类型,后缀为uU的为unsigned int类型,后缀为lL的为long int类型,后缀为ulluULLU的为unsigned long int类型。

⑥ 常量本是字符序列,按基数计算机器内部值的大小,按类型确定存储格式。

⑦ 根据C语言标准,选项C也是正确的,语义是:把unsigned int型十进制常量200u的机器内部值视为int型,对它执行一元负运算得到相反数,再把这个相反数的机内值视为unsigned int型并赋于变量c。虽然符合标准,但这种用法很难派上用场,即便是有用场,也一定极为罕见。本条解释仅供深入学习者参考,二级考生可忽略。

char型变量既可存储字符,也可存储小整数。

练习题

试为自己设计一道孪生题,举一反三。

孪生题1  在下列声明中,不正确的是

­      A  char  x1 = 0x0;

­      B  unsigned int  x2 = −120u;

­      C  int  x3 = 0125;

­      D  long  x4 = 0L;

答案  B

赞赏

返回