主题:简单问题弄不明白,求大虾帮忙
销魂啊啊
[专家分:0] 发布于 2011-02-21 12:01:00
若有定义语句:char i=’\065’; 则( )。
A.使i的值包含3个字符 B。 使i的值包含1个字符
C.使A的值为A。 D。定义错误,不能确定i的值
回复列表 (共5个回复)
沙发
DingDangHe1987 [专家分:0] 发布于 2011-02-21 13:21:00
选择B 。
char i='\065';
其中\ 表示是字符用转义字符表示,\后面的数表示的是在ASII中的编码,而065中的0说明了转义字符编码用八进制表示的,即65表示8*6+5;类似的,如果是0x65则表示的是十六进制,即6*16+5;
这里如果是‘\65’则就是字符A了;
板凳
销魂啊啊 [专家分:0] 发布于 2011-02-21 14:55:00
但答案是 D 哦
3 楼
fragileeye [专家分:1990] 发布于 2011-02-21 16:32:00
其实二楼的意思是对的、、
[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 楼
御风少侠 [专家分:0] 发布于 2011-02-27 14:12:00
因为' \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: “初始化”: 截断常量值
我来回复