回 帖 发 新 帖 刷新版面

主题:简单问题弄不明白,求大虾帮忙

若有定义语句:char i=’\065’;  则(  )。
A.使i的值包含3个字符          B。 使i的值包含1个字符
C.使A的值为A。               D。定义错误,不能确定i的值

回复列表 (共5个回复)

沙发


选择B  。
char i='\065';
其中\ 表示是字符用转义字符表示,\后面的数表示的是在ASII中的编码,而065中的0说明了转义字符编码用八进制表示的,即65表示8*6+5;类似的,如果是0x65则表示的是十六进制,即6*16+5;
这里如果是‘\65’则就是字符A了;

板凳


但答案是 D 哦

3 楼


其实二楼的意思是对的、、

[color=808080]两个转义字符\0oo和\xhh是ASCII码的专用表示方式。如果想用一个字符的八进制ASCII代表它,可以在编码值前加一个反斜杠(\) 并用单引号引起来。。例如:如果编译器不识别警报字符(\a),则可以使用ASCII码代替:
beep='\007';
可以省去前面的0,就是说'\07'和'\7'都是可以的。即使没有前缀0,这种写法仍会使数值被解释为八进制。

char grade='B';意味着'B'作为数值66存储在一个32单位中,而赋值后的grade则把66存储在8位单元中。利用字符常量的这个特性,可以定义一个字符常量‘FATE’,这将把4个独立的8位ASCII码存储在一个32位单元中。然而,如果把这个字符常量赋给一个char变量,那么只有最后8位会起作用,因此变量的值为'E'。[/color]
这段话摘自C primer plus 5

4 楼


因为' \065'是两个字符(空格和\065),超过了char类型的字节范围,所以这两个字符被当成int型,占4个字节,赋给i时,由于i只有一个字节的空间,故发生截断,只有最低位的一个字节赋值到i。
' \065':
00000000 00000000 00100000 00110101
i:
00110101
\065是十进制的53,对应的字符是5

在VS2008会有警告:
warning C4305: “初始化”: 从“int”到“char”截断
warning C4309: “初始化”: 截断常量值

5 楼

是不是因为'\0'?

我来回复

您尚未登录,请登录后再回复。点此登录或注册