C语言学习笔记(十五)
admin
2024-02-29 12:10:42

C语言学习第十五天

2.7 类型转换
当一个运算符的几个操作 数类型不同时,就需要通过一些规则把它们转换为某种共同的类型。一般来说,自动转换时指把“比较窄的”操作数转换为“比较宽的”操作数,并且 不丢失信息的转换。针对可能导致信息 丢失的表达式,编译器可能会给出警告信息,比如把教长的整型值赋给较短的整型变量,把浮点型值赋值给整型变量,等等,但这些表达式并不非法。
由于char类型就是较小的整型,因此 在算术表达式中可以自由使用char类型的变量,比如下面的函数atoi就是将一串数字转换为相应的数值:

/* atoi 函数:将字符串s转换为相应的整型数 */
int atoi(char s[]) {
    int i, n;

    n = 0;
    for(i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
        n = 10 * n + (s[i] - '0');
    return n;
}

函数lower是将char类型转换为int类型的另一个例子,它将ASCII字符集中的字符映射到对应的小写字母。如果待转换的字符不是大写字母,lower函数将返回字符本身。

/* lower函数: 把字符c转换为小写形式;只对ASCII字符集有效 */
int lower(int c) {
    if (c >= 'A' && c <= 'Z')
        return c + 'a' - 'A';
    else
        return c;
}

上述这个函数是为ASCII字符集设计的。在ASCII字符集中,大写字母与对应的小写字母作为数字值来说具有固定的间隔,并且每个字母表都是连续的——也就是说,在A~Z之间只有字母。
标准头文件定义了tolower(c)函数将c转换为小写形式,类似的,测试语句:

    c >= '0' && c <= '9'

可以用该标准库中的函数

    isdigit(c)

替代。
当关系表达式(如i>j)以及由&&、||连接的逻辑表达式的判定结果为真时,表达式的值为1;当判定结果为假时,表达式的值为0。因此,对于赋值语句

    d = c >= '0' && c <= '9'

来说,当c为数字时,d的值为1,否则d的值为0。但是,某些函数(比如isdigit)在结果为真时可能返回任意的非0值。在if、while、for等语句的测试部分中,“真”就意味着“非0”,这二者之间没有区别。
C语言中,很多情况下会进行隐式的算术类型转换。一般来说,如果二元运算符(具有两个操作数的算术运算符称为二元运算符,比如+或*)的两个操作数具有不同的类型,那么在进行运算之前先要把“较低”的类型提升为“较高”的类型。运算结果为较高的类型。由如下规则:
    如果其中一个操作数的类型为long double,则将另一个操作数转换为long double类型;
    如果其中一个操作数的类型为double,则将另一个操作数转换为double类型;
    如果其中一个操作数类型为float,则将另一个操作数转换为float类型;
    将char与short类型的操作数转换为int类型;
    如果其中一个操作数的类型为long,则将另一个操作数也转换为long类型。

一般来说,数学函数使用双精度类型的变量。使用float类型主要时为了在使用较大的数组时节省存储空间,有时也为了节省机器执行时间(双精度算术运算特别费时)。
赋值时也要进行类型转换。赋值运算符右边的值需要转换为左边变量的类型,左边变量的类型即表达式结果的类型。
当把较长的整数转换为较短的整数或char类型时,超出的高位部分将被丢弃。因此,下列程序段:

    int i;
    char c;

    i = c;
    c = i;

执行后,c的值将保持不变。无论是否进行符号扩展,该结论都成立。但是,如果把两个赋值语句的次序颠倒一下,则执行后可能会丢失信息。
如果x时float类型,i是int类型,那么语句x=i与i=x在执行是都要进行类型转换。当把float类型转换为int类型时,小数部分将被截取掉;当把double类型转换为float类型时,时进行四舍五入还是截取取决于具体的实现。
在任何表达式中都可以使用一个称为强制类型转换的一元运算符强制进行显示类型转换。

    (类型名)表达式

练习2-3 编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。
______________________________________________________________
int htoi(char s[]) {
    int i, n;

    i = n = 0;
    if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X'))
        i = 2;
    for(; s[i] >= '0' && s[i] <= '9' || s[i] >= 'a' && s[i] <= 'f' || s[i] >= 'A' && s[i] <= 'F'; ++i) {
        if(s[i] >= '0' && s[i] <= '9')
            n = 16 * n + (s[i] - '0');
        else if (s[i] >= 'a' && s[i] <= 'f')
            n = 16 * n + (s[i] - 'a' + 10) ;
        else
            n = 16 * n + (s[i] - 'A' + 10) ;
    }
    return n;
}
______________________________________________________________

相关内容

热门资讯

IPO观察丨云迹科技通过港交所... 红星资本局10月6日消息,日前,酒店机器人供应商云迹科技在港交所网站披露聆讯后资料集,这意味着云迹科...
天猫代运营十大靠谱服务商榜单:... 在竞争日益激烈的中国电商市场,天猫作为品牌运营的主阵地,其复杂多变的规则与玩法使得“专业代运营”成为...
这家国际班轮公司,成立中国首个... X-Press Feeders成立凯祺瑞达(上海)海运有限公司青岛分公司。 新加坡船公司X-Pres...
原创 资... 上周六帮我妈整理抽屉,翻出一沓理财到期单,好家伙,去年她不听劝买的那只 “预期收益 8%” 的产品,...
金价涨涨涨!现货黄金首破390... 红星资本局10月6日消息,今日早盘,现货黄金价格突破3900美元/盎司大关,再度创下历史新高。此时距...
全球钢铁行业变天?中国暂停购买... 中国暂停购买澳洲铁矿石,全球钢铁产业要变天了?中国矿产资源集团最近干了一件大事,宣布暂停采购澳洲必和...
全球钢铁行业变天?中国暂停购买... 中国暂停购买澳洲铁矿石,全球钢铁产业要变天了?中国矿产资源集团最近干了一件大事,宣布暂停采购澳洲必和...
丰田723亿造一座“未来城市”... 1968年,丰田东富士工厂正式竣工,首批产品为Mark II货车。在随后的50多年里,东富士工厂累计...
阳光电源股份有限公司向港交所提... 新京报贝壳财经讯 10月5日,港交所官网显示,阳光电源股份有限公司向港交所提交上市申请书,独家保荐人...
五大承诺皆烂尾,嘉士伯重庆再“... 订阅 快刀财经 ▲ 做您的私人商学院一再失信,嘉士伯无疑是自毁长城。作者:朱末来源:快刀财经(ID:...
原创 中... 第一:地缘紧张,黄金再度大涨 周一开盘,黄金开盘直线猛涨,一度冲破3920美元/盎司,截至发稿有所回...
刚刚,混元图像 3.0 全球“... 腾讯混元图像 3.0 发布仅仅一周,就开启了全球“霸榜“模式。 10月5日,国际大模型竞技场LMAr...
高市早苗意外胜选引爆市场!日元... 支持刺激政策的高市早苗赢得自民党领袖选举,有望成日本首位女首相。这一结果打乱市场此前预期,日本央行货...
中秋致投资者:以月为证,共赴长... 天上月,映初心;盘面间,守同行 饼香融暖意,数据见真诚 中秋夜,愿我们以月为媒,共盼市场向好,久伴长...
理想、阿里巴巴跌超2%,中国白... 记者丨江佩佩 张嘉钰编辑丨刘巷10月6日,港股三大指数调整,截至11:44,恒生指数跌0.73%,恒...
港股,突变!三大变数,来袭! ... 亚太市场的跷跷板效应显现!今日(10月6日)中秋节,亚太市场开市,日经指数大涨超4%,而此前强势的香...
阳光电源向港交所递表拟港股上市 观点网讯:10月5日,A股光伏巨头阳光电源股份有限公司已向香港交易所正式提交上市申请书,拟在香港主板...
中国AI旅游应用分化加剧:谁在... 企业内部的AI应用,慢得超出想象。 2025年已行过半,人工智能在中国旅游行业的应用呈现出更加清晰的...
【深圳特区报】深企参建匈塞铁路... 深圳特区报讯(记者 窦延文)当地时间10月3日,由深圳总部企业中建科工旗下中建钢构参建的匈塞铁路塞尔...
被年轻人抛弃的KTV,跑去日本... 出品丨花朵财经观察(FF-Finance)撰文丨华见“后来~我总算学会了~如何去爱~可惜你~早已远去...
本周外盘看点丨美国政府停摆何时... 上周全球市场风云变幻,由于两党无法就支出法案达成共识,美国联邦政府陷入停摆,国际金价突破3900美元...
国庆特辑 | 走进云南,寻根“... 总第4360期作者 |餐饮老板内参内参君云南大地多褶皱,其中散落着众多食材精灵。循着山野出处,特意跳...
国庆特辑 | 走进云南,寻根“... 总第4360期作者 |餐饮老板内参内参君云南大地多褶皱,其中散落着众多食材精灵。循着山野出处,特意跳...
原创 为... 在日常生活的消费场景中,我们手中的人民币最大面值始终是 100 元。这不禁让人产生疑问:为啥人民币的...
原创 中... 贸易寒流突袭加拿大:油菜籽困局背后的地缘政治博弈 加拿大农田里燃起的熊熊烈火,比渥太华政客们想象的...
特朗普,突发!黄金直线狂飙! ... 国际金价在今日开盘后再度爆发。10月6日,黄金开盘直线猛涨,一度冲破3920美元/盎司,截至发稿有所...
全国首家,智驾、机器人双龙头,... 智能驾驶,到哪一步了?当下,智能驾驶正步入关键的“换挡期”——L2+辅助驾驶融入日常行车后,L3级有...
1500亿创新药龙头第三次冲刺... 记者丨江佩佩 张嘉钰 编辑丨刘巷 9月29日,据港交所官网,四川百利天恒药业股份有限公司(下称“百利...
早新闻 | 002968拟重大... 宏观热点 央行、证监会、外汇局,联合发布! 9月26日,中国人民银行、中国证监会、国家外汇管理局联合...
“过节式”作息或带来心脑血管疾... 本文来源:时代周报 作者:林昀肖时值十一长假,人们的饮食、作息也切换成“过节式”,长途跋涉、舟车劳顿...