关于C语言的整型和浮点型之间的强制转换与输出格式符问题
以%开头的都是输出控制符。主要有%d、%u、%ld、%p。
1、%d它的意思是按十进制整型数据的实际长度输出。
2、%u输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。
3、%ld它的意思是输出长整型数据。
4、%p 输出变量的内存地址。
扩展资料
1、八进制在C语言中,八进制的输出格式是 %o,八进制是以0为开头的数字,0后面的数字都要小于8,最大为7。
2、十六进制十六进制的输出格式是 %x,十六进制表示的数是0x12 ,这个0也是零。十六进制有点特殊的地方是1-9是纯数字,10-15是用A、B、C、D、E、F来表示的。
4、%d中的d并不表示integer,而是表示decimal(10进制)。
printf("b=%f,a=%d
", (float)b, (int)a); 原因很简单,格式串中的 %f 要求对应的参数必须是浮点型,否则输出就不正确。
你已经看到了,输出是 b=0.000000,不正确吧?
整型数据调为浮点型必须使用 (float)b,而不是改一下格式串为 %f 就能做到的。
//第二次的情况
int a=3;double b=1;b=1/a;
printf("%-15d%-15d%-15f%-15f",1.0/a,b,1.0/a,b);
输出结果:1431655765 1070945621 0.000000 0.333333
压进栈的是double,double,double,double(8,8,8,8);1.0/3,0.0,1.0/3,0.0
函数里面使用的是int,int,float,float(4,4,8,8)
分析:首先1.0/3所占的8个字节按照平均分4个字节并按int输出;第二个0.0按float输出;第三个1.0/3按float输出;最后0.0没用到;所以其结果等价于printf("%-15d%-15d%-15f%-15f",1.0/a,b,1.0/a); 如果不信,你可以试试printf("%-15d%-15d%-15f%-15f",1.0/a,b,b); 的结果是等价于printf("%-15d%-15d%-15f%-15f",1.0/a,b,b,1.0/3);
//第三次修改
int a=3;
double b=1;
b=1.0/a;
printf("%-15d%-15d%-15f%-15f",1/a,b,1/a,b);
输出结果:0 1431655765 0.000000 0.333333
压进栈的字节类型分别为int,double,int,double(4,8,4,8);0,1.0/3,0,1.0/3
而函数里面使用的字节分别为int,int,float,float(4,4,8,8)
很显然,在第二个位置;会取1.0/3double类型的前4个字节;然后还剩下1.0/3double的后4个字节,以及0int的4个字节,以及1.0/3的8个字节;剩下的那2个4字节一起转换为float类型,其doube结果是5.291174399002e-315,转换为float是0;1.0/3转换为float就是0.333333
//第四次修改
int a=3;
double b=1;
b=1.0/a;
printf("%-15d%-15d%-15f%-15f",1.0/a,b,1.0/a,b);
输出结果:1431655765 1070945621 0.333333 0.333333
压进栈的字节类型分别为int,double,int,double(4,8,4,8);1.0/3,1.0/3,1.0/3,1.0/3
而函数里面使用的字节分别为int,int,float,float(4,4,8,8)
按照上面的分析,必然是这种结果
其等价于 printf("%-15d%-15d%-15f%-15f",1.0/a,b,1.0/a);
额,我建议你看看编译原理,那里的内容能够让你更感兴趣。scanf定义的人他们写的函数,你只要会用就行,深究下去没有必要。你要是觉得想要深究下去的话,你可以使用windows或者linux的系统接口(getc与putc,windows的没见过),自己模仿写一下,这样你更能明白原理了。写的时候要考虑缓冲与非缓冲,那些东西可能会更有意义。。。
C语言中整型数可以和浮点数判断是否相等吗?
从原则上和语法上来说,C语言中整型数都是可以和浮点数判断是否相等的。但是在逻辑上很可能因为计算机的浮点误差而带来差错。计算机会自动把整数转换为浮点数后再进行判断。但是,要想比较两个浮点数是否相等,最好应该比较它们的差是否小于指定的范围。例如:所以,如果要正确判断,建议采用下面的方法:...
int,char,float有什么区别
区别如下:一、定义的区别 1、int是整数型,用于定义整数类型的数据。2、char是字符型,用于定义字符类型数据。3、float是单精度浮点型,可以准确表示到小数点后六位。二、大小的区别 1、int内存大小为4bybe。2、char内存大小为1bybe。3、float内存大小为4bybe。
(c语言中)想知道double,int,%d和%f的关系
int:整型,即我们通常意义下的整数变量,例如1、2、3、4、5等。double:双精度实型数,即我们通常意义下的小数,例如1.25、1.37、5.0等。d:这是C语言中scanf用于输入整数的格式,输入整数的格式是scanf("%d",&a)。f:这是C语言中scanf用于输入小数的格式,输入整数的格式是scanf("%lf",&a...
如何运用C语言的整型和浮点数实现加减乘除计算
对于加减乘三种运算,可以直接用整数进行。对于除法,C语言中两个整数相除,结果仍然是整数(只取商的部分,忽略余数),如果想得到除法的精确值(例如10\/4=2.5),可以使用浮点数参与计算,方法是把被除数乘以1.0,然后再除以除数,结果就是浮点数了。
在C语言中float 与int 有什么不同
float和int分别代表数据类型 用float定义的数据就是float型即浮点型,直白的说就是精确到小数点后面n位数,一般是8位 用int定义的数据就是int型即整型,也就是整数 建议仔细看课本。。。float max是定义max这个变量为浮点型变量,它里面存储的数据都是浮点型的,...
C语言中char和int,float有什么区别?分别适用于什么情况?谢谢解答!_百...
int是整型数据;如:int a 则a的值只能是整型;如a=3;char是字符型;如:char a 则a的值只能是字符型;如a='a'float是浮点型数据;如:float a 则a的值只能是浮点型数据;如a=3.50;<即我们数学中的实数:必须写成小数形式>
程序C语言中基本数据类型(字符、整数、长整数、浮点)
本章主要介绍C语言的各种数据类型、运算符和表达式。 2.1 C语言的数据类型 C语言的数据类型具体分类如下: 基本类型:分为整型、实型(又称浮点型)、字符型和枚举型四种。 构造类型:分为数组类型、结构类型和共用类型三种。 指针类型 空类型 2.2 常量和变量 2.2.1 常量 1、常量的概念:在...
c语言中如果整形变量x浮点型变量y双精度型变量z则表达式y产ry是什...
在C语言中,将整型变量和浮点型变量进行运算时,整型变量会自动转换为浮点型变量。但是,如果将一个浮点型变量和一个双精度型变量进行运算,则浮点型变量会自动转换为双精度型变量。因此,表达式y + z的结果是一个双精度型变量。由于类型提升的规则,当整型变量和双精度型变量进行运算时,整型变量会自动...
c语言中的数据什么情况下用整型、单精度浮点型,双精度浮点型、字符型...
只有整数的情况用整形,如果可能有小数,但是位数不大或者对保留的小数要求不高就用单精度,比较大用或者对精度要求较高(6位以上)用双精度。如果可能有非数字类型的就用字符型。
c语言编程,浮点型变量和整形变量能不能相除
可以相除,计算机先将整型变量值的类型自动转换为浮点型(但是整型变量本身的数据类型和值并不改变),之后进行浮点数的运算。举例如下:int a1=4, a2;float b1 = 5.2, b2;a2 = b1\/a1; \/\/ 运算结果为1,因为a2为int类型,所以将5.2\/4=1.3的结果转换为int型,即舍去小数部分b2 = b1\/a1;...
老纪贝诺: 比如说 float n=3.14, intN; 你要得到n的整数部分, 那么 整数部分 intN=(int)n; 这里就用到了强制类型转换,将float型 强制转换为int型.
蠡县15251485683: c语言,强制类型转换 - ?
老纪贝诺: 强制类型转换的一般形式为:(类型说明符)(表达式),例如: (float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为 整型 强制类型转换是通过类型转换运算来实现的.功能是把表达式的运算结果强制转换成类型说明符所表示的类型. 注意事项:①类型说明符和 表达式都必须加括号(单个 变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了.②无论是 强制转换或是自动转换,都只是为了本次运算的需要而对 变量的数据长度进行的临时性转换,而不改变数据说明时对该 变量定义的类型.
蠡县15251485683: C语言的浮点型怎么转换为整型? - ?
老纪贝诺: C语言有以下几种取整方法:1、直接赋值给整数变量.如:int i = 2.5; 或 i = (int) 2.5;这种方法采用的是团森舍去小数部分,能用于你的问题.2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),而下面介绍的取整函数返回...
蠡县15251485683: C程序中的强制转换类型?
老纪贝诺: 你好,短整型强制转换长整型精度会有所损失,你输出的X是浮点型的,希望采纳.
蠡县15251485683: C语言中强制类型转换究竟改变了什么 - ?
老纪贝诺: 不同类型的变量在内存中有不同的存储方式和不同长度,强制转型前后有什么不同都要转换过来.例如int y=3;char x=(char)y;,他们只是长短不同,就把y的高3字节全截掉,只把最低一个字节赋给了x;反过来,若char y=3;int x=(int)y;,那么,将把高3字节全用0补齐.若是浮点数与整型数强制转型,不仅存储长度发生了变化,而且存储方式也发生了变化:整数用补码表示,而浮点数用阶码+原码表示,都要一一转换过来.还有指针变量,转换也较复杂.强制转型时为目标类型设置一个临时变量,轮换后就用这个临时变量操作,一旦操作结束,临时变量也消失了,整个过程是由编译器编译时安排好了的.
蠡县15251485683: C语言 整型变量 为什么可以装 浮点型的 - ?
老纪贝诺: 你好! 当将浮点型赋值给整型变量时,系统会自动去掉小数部分,只保留其整数部分并将其赋值给整型变量.
蠡县15251485683: c语言中 int a=2,b=3; (float)(a+b)/2=??? - ?
老纪贝诺: a、b 都是整形对a+b的值进行强制类形转换成浮点型. (float)(a+b)/2 浮点型除以整形,这里含有隐式类型转换,隐式类型转换是向上转换的,当整形和浮点型进行运算时,整形要自动转成浮点型再进行运算,结果为浮点型.int a=2,b=3; (float)(a+b)/2=2.5
蠡县15251485683: C++中怎么在运算中强制将浮点型转换成整型? - ?
老纪贝诺: int(a);//就是把浮点数a强制转换成整型 //参考代码 #include <iostream> using namespace std; int main() {float a=12.345;int b=(int)a;cout<<b;return 0; } /*运行结果: 12 */
蠡县15251485683: C语言强制类型转换问题 - ?
老纪贝诺: 你好! 一步一步来 int a,b; 这句的功能是操作系统为 变量a,b分别分配一块空闲的存储空间 以后使用a,b将相当于访问各自所对应的 存储空间 a = 0000;b = Ox1234; 这句的功能是 把0000放到变量a所对应的存储空间 把0x1234放到变量b所对应...
蠡县15251485683: 在C语言中怎样表示一个既有整数又有浮点数的数组 - ?
老纪贝诺: 先定义一个结构体,其中有float变量和bool变量,如果是纯c,你可以用整形的0、1来取代bool变量作为判断是否是整形的参数,然后用此结构体定义数组,初始化的时候,如果数值为整形,则bool变量赋值为true或者是整形参数赋值为1(注意这...