免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2530 | 回复: 13
打印 上一主题 下一主题

ANSI的类型转换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-25 19:28 |只看该作者 |倒序浏览
对于ANSI C中,0<(unsigned char)1
这样一个表达式,作用后,0和1 的类型各是什么?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-10-25 20:20 |只看该作者

ANSI的类型转换

int

论坛徽章:
0
3 [报告]
发表于 2005-10-25 21:27 |只看该作者

ANSI的类型转换

请说明原因啊?

论坛徽章:
0
4 [报告]
发表于 2005-10-25 21:31 |只看该作者

ANSI的类型转换

[quote]原帖由 "hhlcjcj"]请说明原因啊?[/quote 发表:


0和1不是变量,请注意这一点啊,呵呵。
位运算,一定是在寄存器上发生的,而不是内存单元。

论坛徽章:
0
5 [报告]
发表于 2005-10-25 21:33 |只看该作者

ANSI的类型转换

[quote]原帖由 "hhlcjcj"]请说明原因啊?[/quote 发表:


语言标准所规定,没有原因...

论坛徽章:
0
6 [报告]
发表于 2005-10-25 21:46 |只看该作者

ANSI的类型转换

原帖由 "albcamus" 发表:


0和1不是变量,请注意这一点啊,呵呵。
位运算,一定是在寄存器上发生的,而不是内存单元。


版主说的好

论坛徽章:
0
7 [报告]
发表于 2005-10-25 21:59 |只看该作者

ANSI的类型转换

ANSI有什么文档可以查阅嘛。
好像学了用了这么长的时间C,都没看到过能成书的ANSI文档呀。

论坛徽章:
0
8 [报告]
发表于 2005-10-25 22:07 |只看该作者

ANSI的类型转换

注意提升规则。

c语言混合运算的规则是

  1. double <----  float
  2.    ^
  3. long
  4.    ^
  5. unsigned
  6.    ^
  7.    int  <--- char, short
复制代码


  1. 0<(unsigned char)1
复制代码

上面的关系运算表达式的执行顺序应当是,(unsigned char)1表达式的结果是unsigned char,然后自动转换成int,然后进行比较操作。

强制类型转换得到的是一个目标类型的中间变量,原来的变量类型自始至终都不会发生变化,你可以认为这是一个表达式,表达式的计算结果是目标值。

要注意的是,进行比较的是表达式,而不是变量本身。所以无论怎样,0, 1的类型不会变。

论坛徽章:
0
9 [报告]
发表于 2005-10-25 22:13 |只看该作者

ANSI的类型转换

[quote]原帖由 "renstone921" 发表:
上面的关系运算表达式的执行顺序应当是,(unsigned char)1表达式的结果是unsigned char,然后自动转换成int,然后进行比较操作。

强制类型转换得到的是一个目标类型的中间变量,原来的变量类型自始至终都不会发生

论坛徽章:
0
10 [报告]
发表于 2005-10-25 22:19 |只看该作者

ANSI的类型转换

原帖由 "zalem" 发表:


强制类型转换并不会生成一个中间变量,它只是指示编译器该采用什么判断指令和如何生成目标代码(在判断语句中)


引出何故。
莫不成语义分析中修改过的符号表中同一个变量的kind,TypePtr属性会指向2个不同的结构????一个指向int,一个指向char????
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP