| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 637 人关注过本帖
标题:求高手帮忙看一下这个小代码
只看楼主 加入收藏
想飞的老虎
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-21
结帖率:25%
收藏
已结贴  问题点数:1 回复次数:5 
求高手帮忙看一下这个小代码
#include <iostream>
using namespace std;
int main()
{
    int tu ='12';
    cout<<tu<<endl;
    return 0 ;
}
请问为什么这段代码是对的,会有输出的
搜索更多相关主题的帖子: include 
2014-08-25 16:09
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:1 
12被解析成acii码。
1的码是十进制49,十六进制31
你可以试着改成`11`
就是十六进制3131,换成十进制是12593
2014-08-25 19:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
这种代码GCC会给warning

a.cpp:5:13: warning: multi-character character constant [-Wmultichar]
     int tu ='12';
             ^


2014-08-25 20:46
雕行天下
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2014-8-26
收藏
得分:1 
'12'被理解成ASCLL码
2014-08-26 16:48
想飞的老虎
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-21
收藏
得分:0 
回复 2 楼 天使梦魔
版主你好。再问个问题,这个转化过程中为什么是转化为16进制,而不是8进制?这里面有什么特殊的说明吗?谢谢你了
2014-08-27 12:47
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
我不是版主.
你这种行为是属于编译器特性的,有的支持,有的不支持.vs微软的有一套自己的标准,所以可能支持,而mingw里的G++是C99标准,这种代码最好少写,不兼容通用标准.
(当然包括其他编译器,要看它怎么支持的)

至于为什么转化过程是16进制,很简单申请的变量是整数,但给值却是字符串,编译器输入文本(就是你打代码的地方)遇到字符全部以16进制解析,包括string和char,这是在内存最简单的运作方式,直接复制存储完毕.其实在int内部就已经完全复制了16进制.而问题其实在cout这里,cout在输出的时候查询变量名字为整数,所以以整数形式输出(做了16进制转换10进制).所以就是现在这个样子.

如果你以后接触内存,系统级开发,你还可以发现以16进制存储的操作,比如

int _tmain(int argc, _TCHAR* argv[])
{
    int a=0x000A;
    int b=0x0001;
    int c=0x00FF;
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
    cin.get();
    return 0;
}

2014-08-27 16:09
快速回复:求高手帮忙看一下这个小代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017362 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved