`
hulianwang2014
  • 浏览: 690187 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

关于C语言的隐式类型转换

 
阅读更多

这个问题,本来以为自己早已烂熟于胸了,但是一个测试程序还是把我给放倒了。


首先给出以下C语言默认的隐式转换规则:

char,short --> int --> unsigned --> long --> double <-- float

OK, 这里看起来好像也完全没问题。我们接下来看一个简单的小示例:

#include <stdio.h>

int main()
{
    unsigned short a = 1;
    unsigned short b = 0;
 
    if (a < (b-1)) //a和b-1的结果-1都被转换为int类型进行比较,1<-1,显然false
    {
        printf("in if\n");
    }

    return 0;
    
}

运行结果是啥?(先想想,看自己的判断是不是对的)

// 结果啥也没输出

我们稍微改动一行,看看结果如何?

#include <stdio.h>

int main()
{
    unsigned short a = 1;
    unsigned int b = 0;
 
    if (a < (b-1)) //b-1的结果-1,被转换为0xffffffff,1<0xffffffff,显然true啊
    {
        printf("in if\n");
    }

    return 0;
    
}
这次运行结果呢?

carl@ubuntu:~$ ./a.out 
in if

if语句验证通过。


从上面那个示例来看,我们应该怎么想呢?

char,short类型,不管是否unsigned char, unsigned short,都会转换为signed int类型,这是我的想法。


各位朋友,我的理解是否有误呢?欢迎批评指正

分享到:
评论

相关推荐

    C语言隐式类型转换规则

    C语言隐式类型转换规则。了解一下对写程序有好处,可以防止不必要的错误

    C语言中自动隐式转换与类型强制转换实例分析

    本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include #include #include double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量...

    C语言隐式类型转换的一个小坑

    这个问题大致是这样的,本来试图写一个产生低8位为1的掩码的语句: uint32_t mask = ~((uint8_t)0); ,结果发现算出的掩码是 0xffffffff 显然不符合预期,于是折腾检查了一番,写出对比程序如下: ...

    隐式类型转换

    c编程过程中的数据类型隐式转换,帮助初学者了解数据结构的类型,减少数据类型锁带来的编码错误

    C语言程序设计(第2版)-2期 拓展知识3-2 系统隐式转换.pdf

    C语言程序设计(第2版)-2期 拓展知识3-2 系统隐式转换.pdf 学习资料 复习资料 教学资源

    C语言初级理论最全笔记

    本笔记涵盖了C语言进制转换、变量、关键字、注释、三大语句、函数、数组、结构体、指针、隐式类型转换、原码反码补码、迭代递归、缓冲区、基本数据结构等26个方向深度解剖C语言学习路线,让每一个学子,都拥有最通透...

    C语言程序设计+研究生复试+求职+面试题

    隐式类型转换的四种情况; 结构体对⻬规则; 指针在函数中的应用和特点; C 语言变量种类; 内存分配方式以及它们的区别; 数组与指针的区别; 函数调用参数传递方法有哪些; static全局变量与普通的全局变量有什么...

    谭浩强C语言设计第三版.pdf

     2.3.2 数据类型的隐式转换  2.3.3 数据类型的显式转换  2.4 数据的控制台输入与输出  2.4.1 格式化输出函数pIintf()  2.4.2 格式化输入函数scanf()  2.4.3 字符输入/输出函数getchar()与putchar()  习题二 ...

    c++类的隐式转换与强制转换重载详解

    在写这篇文章之前,让我们先回顾一下编译器通过匹配过程确定调用哪一个函数的匹配顺序:(1)寻找和使用最符合函数名和参数类型...C语言编译系统提供的内部数据类型的自动隐式转换规则如下:1.程序在执行算术运算时,

    C语言解析教程(原书第4版)(美) 凯利.pdf

    3.11 隐式类型转换和强制类型转换 3.11.1 整型提升 3.11.2 寻常算术转换 3.11.3 强制类型转换 3.12 十六进制和八进制常量 3.13 总结 3.14 练习 第4章 控制流 4.1 关系操作符、相等操作符和逻辑操作符 4.2 关系操作符...

    C语言编程兵书(完整扫描版 )pdf格式 电子书

    2.5.1 隐式转换 2.5.2 显式转换 2.6 数据的输入Input 2.6.1 使用scanf()函数实现数据输入 2.6.2 一个字符的输入函数—getchar() 2.7 数据的输出Output 2.7.1 使用printf()函数实现数据格式输出 2.7.2 使用putchar()...

    C语言入门经典(第4版)--源代码及课后练习答案

    2.12.3 赋值语句中的隐式类型转换 54 2.13 再谈数值数据类型 55 2.13.1 字符类型 56 2.13.2 字符的输入输出 57 2.13.3 宽字符类型 60 2.13.4 枚举 60 2.13.5 存储布尔值的变量 63 2.13.6 复数类型 63 2.14 ...

    面试中常见的C语言问题

    第一节 C语言编程中的几个基本概念 ...其实这个题目很基础,c应该是整型或者可以隐式转换为整型的数据,很明显不能是实型(float、double)。所以这个命题是错误的。 1.3 const 1. const有什么用途?

    c语言经典代码(针对初学者)

    2.c模拟weindow下getch.c某月天数.c逆序.c逆序四位整数.c排序.c判断某个月...隐式转换.c约瑟夫.c约瑟夫出圈.c账簿结算.c找字符.c正确版砝码.c指针函数.c指针交换.c指针运算.c注册.c自己实现printf.c字符串排序.c字面值...

    《学习 MISRA C》系列连载讲座

    第二讲:“跨越数据类型的重重陷阱”,介绍规范的数据定义和操作方式,重点在隐式数据类型转换中的问题。 第三讲:“指针、结构体、联合体的安全规范”,解析如何安全而高效地应用指针、结构体和联合体。 第四...

    c语言数据结构算法演示(Windows版)

    下窗口上面左侧的小窗口为编辑窗口,由用户输入待插或待删的关键字,输入之后其右侧的操作命令将由隐式状态改为显式状态。 34. 内部排序 图示窗口演示排序过程以及排序过程中关键字之间进行的比较次数和记录移动的...

    VC学习教程<易学C++>

     3.5.1 隐式转换   3.5.2 显式转换   3.6 方法指导   3.7 习题   第4章 要走哪条路——条件语句   4.1 如果……   4.1.1 条件——关系运算   4.1.2 条件——逻辑运算   4.1.3 &&和

    学习MISRA C 系列连载讲座 邵贝贝主讲

    第二讲:“跨越数据类型的重重陷阱”,介绍规范的数据定义和操作方式,重点在隐式数据类型转换中的问题。 第三讲:“指针、结构体、联合体的安全规范”,解析如何安全而高效地应用指针、结构体和联合体。 第四讲:“防范...

Global site tag (gtag.js) - Google Analytics