您的位置:首页 > 编程语言 > C语言/C++

C++学习记录2--常量及运算符释疑

2017-02-23 14:08 691 查看

1、
sizeof("abed\0fg")
的值是?

  sizeof(表达式) 的运算结果是表达式的存储字节数
"abed\0f"
是一个字符串常量,字符串常量系统会自动在其末位添加空字符
'\0'
;同时
"abed\0f"
中,有转义字符
\
,构成空字符
'\0'
,故存在:
'a'
,
'b'
,
'e'
,
'd'
,
'\0'
,
'f'
,
'g'
,
'\0'
8个字节。

2、
sizeof("abed\056")
的值是?

  字符串末尾依旧会自动添加
'\0'
。C++中,若转移字符后是一个整形常量,则必须是一个八进制或者以x开头的十六进制,大小在0~255之间,此时,转移字符后面跟
'\056'
,为八进制表示,实为表示ASCII码为46的字符(.),故存在
'a'
,
'b'
,
'e'
,
'd'
,
'\056'
(相当于
'.'
),
'\0'
6个字节。

3、有整形变量x,y,其中y!=0,则
x=x/y*y+x%y

  
4/5
运算结果为0;

  
5/4
运算救过为1;

  
4.0/5
4/5.0
4.0/5.0
运算结果为0.8。

4、逻辑运算符会自行优化

  
int x=1,y=1,z=1;
执行
++x||++y&&++z
后,x,y,z的值?

  运算符优先级括号>指针>算数运算>关系运算>位运算>逻辑运算>条件运算>赋值>逗号。

  而逻辑运算符中,!>&&>|| (只改变结合顺序)。

  故
++x||++y&&++z
相当于
++x||(++y&&++z)
,然而,优先级只是改变了变量的结合顺序,而不是先做
&&
。实际上,
++x
结果为ture,运算结束。即x=2,y=1,z=1。

  为防止此类情况,在逻辑运算符中应避免出现自增、自减等运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: