C语言强制类型转换和浮点数带来的问题

强制类型转换:

  (int)(6.9)的结果就是6

  1/(float)(sum)的结果是浮点数

浮点数带来的问题

float i=6.25,实际上计算机很可能把i存为6.249999..

用浮点型存放小数,实际存放的是该小数的近似值

存放5.5,实际存放的是5.499999

有一个浮点型变量x,如何判断x的值是否为0

因为0.0000001也可能被存成是0,拿这个数和0.000000000000000000000000001比较,如果较小,那么就是0了

for(i=5.25;i<6.25;i++)

第一次 i<=6.25成立, i++,i 变成6.25,6.25<6.25理论上不成立啊,但有的设备他就成立了,因为他把6.25记成4.2499999了

所以for循环的计数器不要弄成小数

原文地址:https://www.cnblogs.com/chrr/p/12359778.html

时间: 2024-08-28 18:52:03

C语言强制类型转换和浮点数带来的问题的相关文章

c语言强制类型转换

一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf ("    (float)3/(float)2 +100.5f=%f \n",    (float)3/(float)2 +100.5f); // (float) 前缀 二.自动类型转换和隐式类型转换 例1: printf ("    3/2+100.5=%f \n",       (float)3/2 +100.5f); p

C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast.dynamic_cast.const_cast.reinterpret_cast,主要运用于继承关系类间的强制转化,语法为: static_cast<new_type> (expression) dynam

C++强制类型转换

C语言强制类型转换过于粗暴,任意类型之间都可以进行转换,编译很难判断其正确性; 难于定位,在源码中无法快速定位所有使用强制类型转换的语句. C++将强制类型转换分为4种不同的类型:static_cast.const_cast.dynamic_cast.reinterpret_cast. 用法:xxx_cast<Type> (Expression) static_cast 强制类型转换 - 用于基本类型间的转换 - 不能用于基本类型指针间的转换 -用于有继承关系类的对象之间的转换和类指针之间的转

强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

已剪辑自: https://www.cnblogs.com/chenyangchun/p/6795923.html ? ? 1. c强制转换与c++强制转换 ?c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 ? c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast.dynamic_cast.const_cast.reinterpret_cas

C语言中将0到1000的浮点数用强制类型转换的方式生成一幅图像

搞过计算机图像的人都知道,图像中的每一个像素通常为一个整型数,它可以分成4个无符号的char类型,以表示其RGBA四个分量.一幅图像可以看做是一个二维整型数组.这里我会生成一个float数组,其数组大小为1000000,刚好1000*1000,数组内的浮点数的数值范围在0到1000.0之间,呈等差数组排列,相邻两数的差为0.001.然后将其每一个浮点数强制转化成一个整型数或三个unsigned char型,以决定像素的RGB三个通道分量,看看其生成的图像是什么样子. 前几天写了一篇文章是在C语言

C语言的 (强制类型转换) 以及 &#39;字符字面值&#39;

C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型.内容都不变. 以下代码,都用GCC编译. 1 #include<stdio.h> 2 3 int main() 4 { 5 printf("%d %d\n", 'a', sizeof((int)'a')); //输出为97,4. sizeof的作用对象为一个int型中间变量 6 7 char c = 255; 8 printf("%d\n", c); //输出-1. char型的c已溢出,

C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)

强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整型数据的指针类型,后赋给p 注示:类型说明符和表达式都必须加括号,表达式为单个变量可不加括号. 总结:只要看到(类型说明符) (表达式) 的一定为强制类型转换:如(int *) 0x0022; 再举一例:#define DIR *((volatile unsigned int *) 0x0022)

关于强制类型转换(c语言)

因为今天看的代码中用到了结构体的强制类型转换,就很想了解一下结构体的强制类型转换是怎样的. 一个结构体如下: 在下面这段代码中rbuf->reqCmdBuf是一个空指针,首先将这个空指针赋值给一个uint8_t类型的指针buf. 然后将buf指针强制类型转换为rdma_write_msg_head结构体类型指针. 那再这里是怎么转换的呢? 首先,将buf指针指向的内容的前8个字节赋值给rdma_write_msg_head结构体的rwmh->len变量,然后再 将紧接着的1个字节的内容赋值给r

C语言的强制类型转换

1.什么是强制类型转换:遇到一些类型不同的一些数据之间的表达运算 ,需要将较高的数据类型转换成较低类型时. 2.强制类型的形式: (强制转换的类型)(表达式): 2.强制类型的使用: float a,b; int  c ; c=(int) (a+b);