C语言 double c = 123; 为什么可以是123这个整数,而不是小数

C语言 double c = 123; 为什么可以是123这个整数,而不是小数

double是浮点型,浮点型就是实型,它当然包括整数。还可以从另一个角度理解:整数是小数部分为0的浮点数,123就是这种情况啊!追问

意思是123.0吗?

追答

意思是123.0吗?——那倒不是。C规定不写小数点的数字是int型,有小数点的数字是double型,就是说123和123.0虽然值相等但不是同一个类型。而且又规定,较“短”类型赋值给较“长”类型时自动将短类型临时提升到长类型再赋值,所以double c=123;的意思是“先把int型123自动变成double型的123.0再赋给c。

追问

是C语言隐式强制类型转换吗?

追答

是C语言隐式强制类型转换吗?——是。

追问

先把int型123自动变成double型的123.0再赋给c,你能把他的代码写出来吗?

追答

它有什么代码?double x;x=123;就可以了。编译器在解析;x=123;时不再将123的32位补码存入x变量的地址空间,而是先将123变成64位的“符号位(1位)+阶码(11位)+尾数(52位)”二进制序列存储到x变量地址空间——所有自动强制类型转换对程序员都是透明的,没有转换语句。

追问

int a, b;
float c = 12.3;
a = c;
b = (int)c;

结果是a与b的值都是12.其中,代码a=c是隐式转换,就是编译器发现类型不匹配自动给转的.
而b = (int)c就是强制类型转换
你看人家这个都有代码

追答

这叫“转换代码”?那我写的double x;x=123;不是?这都是普通C代码,哪里是转换代码?a = c;是要把一个32位二进制补码“转换”成一个“符号位(1位)+阶码(8位)+尾数(23位)”的32位二进制浮点表达,代码在哪里?

追问

代码怎么理解,int a.b;是一个语句吧?那代码是怎么样的?

追答

这没有严格定义。但共识是“有一个完整格式和完整功能的语句集合”才可能是代码,否则只能叫语句,或代码行。

追问

完整功能的语句集合,那不是叫程序了吗?

追答

原则上代码和程序没有多大区别,而且谁包含谁也说不清。比如,一个很复杂的C程序,可能有好几个文件组成,有的文件可能就一个现成的程序,这几个文件的组合却可被称为“源代码”。这似乎代码包含着程序。但即便是简单的求一组数的最大值最小值的程序,其中若求最大值最小值的功能是用函数实现的,那个这函数板块也可叫“功能代码”。这又叫人觉得程序包含着代码。其实代码与程序的主要区别在于,代码一般指用C语句书写出来的那些文件,叫源代码,源程序都是可以的;而编译链接后形成可执行文件就叫程序了,再叫代码似乎就牵强不妥了……你说呢?

追问

你看我这样理解行不,一个语句就是一个代码,所有语句就是一个大代码,

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网