困惑已久,谢谢

cih103 2007-02-17 03:23:05
int x=1,y=0;

printf("%d",x-->(y+x)?5:26>y++?"1":"2");
为什么输出不是49,

还有经常做题遇到这样的
printf("%d\n",strlen("ats\n\x1234\0xb\\");
能否详细点解析,谢谢
...全文
399 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
双杯献酒 2007-02-24
  • 打赏
  • 举报
回复
有两种形式
\xHH

\xHHHH
比如
char* p = "12\x12"; // 0x31 0x32 0x12 0x00 共 4 byte
wchar_t* pw = L"12\x1234"; // 0x0031 0x0032 0x1234 0x0000 共8 byte
renzaijiang 2007-02-19
  • 打赏
  • 举报
回复
x-->(y+x)?5:26>y++?'1':'2'//""可能是你笔误 用双引号是地址 不是ascII码
首先是
x-- 但x--表达式的值是1 翻译就是1>0+0
26>y++ 等价于 26>y 然后 y++ 因为26是在>号左边 所以先比较再加

整个翻译过来就是
1>0?5:26>0?49:50

变量从左往右算 条件从右往左算



renzaijiang 2007-02-19
  • 打赏
  • 举报
回复
x1234b //还要计算后面的b
所以>65535 溢出
不能吃辣了orz 2007-02-17
  • 打赏
  • 举报
回复
第一个双引号换成单引号,表示字符;双引号表示字符串吧。
gameboyying 2007-02-17
  • 打赏
  • 举报
回复
你从右往左算就是5,机器是右往左的~~
cih103 2007-02-17
  • 打赏
  • 举报
回复
第一题49就错了,上机运行是5
第二题上机运显示错误\x12就对,\x1234就错了显示太长了,不知道为何
不想低调 2007-02-17
  • 打赏
  • 举报
回复
printf("%d\n",strlen("ats\n\x1234\0xb\\");
int strlen(const char *s)
字符串是以\0结尾的,\0以后的不计算
所以,"ats\n\x1234\0xb\\"的长度为5
不想低调 2007-02-17
  • 打赏
  • 举报
回复
第一题输出是49
不想低调 2007-02-17
  • 打赏
  • 举报
回复
\' Single quote
\" Double quote
\\ Backslash
\0 Null character
\a Audible bell
\b Backspace
\f Formfeed
\n Newline
\r Carriage return
\t Horizontal tab
\v Vertical tab
\xnnn Hexadecimal number (nnn)


securi_c 2007-02-17
  • 打赏
  • 举报
回复
\x1234算六个
securi_c 2007-02-17
  • 打赏
  • 举报
回复
a:b>?a:b 自左至右运算
即使你改成printf("%d",x-->(y+x)?5:++y);输出也是5

strlen()是测试字符串长度函数。不包括'\0' 在内。返回值为整型。
cih103 2007-02-17
  • 打赏
  • 举报
回复
\x1234算几个?
v风雪山神庙v 2007-02-17
  • 打赏
  • 举报
回复
\n,\\是转义字符,算一个字节
\0xb是16进制的转义字符,也算一个字节
cih103 2007-02-17
  • 打赏
  • 举报
回复

int x=1,y=0;

printf("%d",x-->(y+x)?5:26>y++?'1':'2');
为什么输出不是49,

还有经常做题遇到这样的
printf("%d\n",strlen("ats\n\x1234\0xb\\");
能否详细点解析,谢谢

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧