精华内容
下载资源
问答
  • int *p=a p是一个指针变量,p变量存放的是一个地址,*p表示该地址里...那么,在c语言中,如何将一个IEEE754格式显示的一个int型变量,转换成float类型呢? 先看一段代码: long int x = 0x3f8ccccd;// 1.1 float b = *

    int *p=a  p是一个指针变量,p变量存放的是一个地址,*p表示该地址里存放的数据,该语句表达的是,将a变量的值存放在p所指向的地址里去。

    int *p=&a  表示p指针指向的是a的地址

    那么,在c语言中,如何将一个IEEE754格式显示的一个int型变量,转换成float类型呢?

    先看一段代码:

    long int x = 0x3f8ccccd;// 1.1
    float b = *(float*)&x;
    printf("b=%f\n",b);

    运行结果:
    ./a.out
    b=1.100000
    解释:
    0x3f8ccccd是浮点数1.1的IEEE754格式,以十六进制显示。&x表示取1.1的地址,得到一个int型指针。(float*)&x表示将&x这个int型指针强制转换成float型指针。*(float*)&x表示这个float型指针所指向的数,也就是1.1。最后b的值显示就是1.1

    展开全文
  • A.scanf("%6.2f%d",&a,&b); B.scanf("%f%n",&a,&...BC都,B中的%n表示输入的字符的个数,用无符号数表示,正确;C中%3o表示八进制数,输入的宽度不超过3,正确 %3o是接受3位八进...

    A.scanf("%6.2f%d",&a,&b);
    B.scanf("%f%n",&a,&b);
    C.scanf("%f%3o",&a,&b);
    D.scanf("%f%f",&a,&b);

    答案:C
    BC都对,B中的%n表示输入的字符的个数,用无符号数表示,正确;C中%3o表示八进制数,输入的宽度不超过3,正确

    %3o是接受3位八进制整数的意思,与&b匹配,所以正确。
    Ascanf()不允许指定精度。

    Dscanf()在输入无符号数时只能用%d或%ld作控制符。

    疑问:
    在这里插入图片描述

    展开全文
  • 一、给float型变量赋十六进制的值时(如0xffffffff),都被认为是正数,当数值的二进制表示很长,则会发生截断,赋值和截断规律为:float变量可保存从左边第一个“1”开始的24位,且第24位是“1”时,只要第25位是“1...
    本文在Win10,Cygwin64下测试。

    结论:

    一、 给float型变量赋十六进制的值时(如0xffffffff),都被认为是正数,当数值的二进制表示很长,则会发生截断,赋值和截断规律为:float变量可保存从左边第一个“1”开始的24位,且第24位是“1”时,只要第25位是“1”,那么截断时第24位加1(进位)。如果第24位是“0”,截断时需要第25、26位都是“1”,24位才会加1(进位)。

    二、计算机内存中以补码保存整数(正数的补码是其本身,负数的补码是反码加1),因此 给char、short、 int、long等有符号变量赋值时,若所赋的值使该类型变量第1位为1,则变量得到负值
        如:   char a=0xff;   则a=-1,0xff被认为是补码。

    三、int(32位)转float时,是按二进制原码转换,第1位符号位保存到float的符号位;余下的31位赋值给float,保存到float的尾数部分,赋值和截断规律同上述
    展开全文
  • 受到帖子 ...  用C语言写了如下代码,将一个float型变量的内容转换为32位0、1串并输出  以float型变量(其值为4.25)为例 #include #include #define N 32 #define BigEnd 0

           受到帖子 http://blog.csdn.net/demon__hunter/article/details/3566232启发,

           用C语言写了如下代码,将一个float型变量的内容转换为32位0、1串并输出

           以float型变量(其值为4.25)为例

    #include <stdio.h>
    #include <string.h>
    
    #define N 32
    #define BigEnd 0
    #define LittleEnd 1
    
    void ReverseArray( char *, int len );
    int	JudgeBigOrLittleEnd();
    
    int main()
    {
    	float fVal = 4.25;
    	char *p = NULL;
    	
    	int i = 0, j = 0;
    	char mask = 0x01;
    	char str[N+1] = "";
    	printf("fVal = %f\n",fVal);
    	
    	if ( BigEnd == JudgeBigOrLittleEnd() )
    		printf("当前CPU为大端模式\n");
    	else
    		printf("当前CPU为小端模式\n");
    		
    	p = (char *)&fVal;	//整形变量地址转换为char *
    	for (i=0; i<4; i++)
    	{
    		mask = 0x01;
    		for (j=0; j<8; j++)
    		{
    			if (*(p+i) & (mask<<j))  //用mask与上*(p+i)第j位,通过判断是否非零决定该位是'0'还是'1'
    				str[8*i+j] = '1';
    			else
    				str[8*i+j] = '0';
    		}
    	}
    
    	str[N] = '\0';
    	ReverseArray( str, N );
    	printf("%s\n",str);
    	for ( i=0; i < 32; i ++)
    	{
    		printf("%c",str[i]);
    		if (0 == (i+1)%8)
    			printf(" ");
    	}
    	printf("\n");
    }
    
    void ReverseArray( char *s, int len )
    {
    	int i = 0;
    	char tmp = 'a';
    	if ( NULL == s )
    		return;
    	while( i < len/2 )
    	{
    		tmp = s[i];
    		s[i] = s[len-i-1];
    		s[len-i-1] = tmp;
    		i++;
    	}
    }
    
    int JudgeBigOrLittleEnd()
    {
    	int x = 0x12345678;
    	char b = (char)x;
    	if (0x78 == b)
    		return LittleEnd;
    	else
    		return BigEnd;
    }
    
    


    运行结果:

            mahone@lte:~/ws/LinuxC/projects/float2binary$ ./a.out
            fVal = 4.250000
            当前CPU为小端模式
            01000000100010000000000000000000
            01000000 10001000 00000000 00000000

    解析:

    由于float型变量,值为4.25时,其在内存中存储方式为

    01000000100010000000000000000000

    第一位为0,表示正,接下来8位为10000001,即1*2^7 + 1 = 129,指数位偏移位数计算方式为129-127 = 2(小数点向右)

    低23位为小数部分: 00010000000000000000000,添上小数点,加上小数点前面的1,即

    1.0001

    小数点右移两位,加上符号,最终为

    100.01

    也即:1*2^2 + 1*2^(-2) = 4 + 1/4 = 4.25

    展开全文
  • 位运算函数实现float型变量取整数位

    千次阅读 2016-01-15 19:59:26
    虽然C语言自带隐式类型转换,即:...但是这几天了解了float的结构,所以自己写了一个函数 int ftoi(const float f) 来实现它 下面是float的结构: float一共32位,其结构定义如下: |-------- 31 -------|-
  • float型变量和“零值”比较的方法

    千次阅读 2019-04-05 10:57:24
    请写出float x与“零值”比较的if语句? 当时只知道不能直接用float类型的值与0进行“==”或“!=”比较,但不知道该具体怎么写这个if语句。看过答案才知道,应该设法转化成“>=”或“<=”,即: const float ...
  • float型定义变量:float = 3.14;,是否正确? 解析:不正确,赋值运算符(=)左右两边的精度类型不匹配。在默认情况下,包括小数点的实数,如本题中的3.14,被存储为double类型(即双精度),而float类型定义...
  • float类型变量

    千次阅读 2012-04-17 17:51:45
    float a = 11.2 ————>错 float a = 11.2f ————>
  • Java如何创建float类型变量

    千次阅读 2020-08-25 15:22:29
    为什么创建float变量要加上f? 创建float类型变量,并且初始化:float f1 = 125.8f 注意:初始化float变量的时候,后面要加上"f"。 如果不加"f",则系统会默认该变量为double类型 float 数据类型是单精度、32位、...
  • float变量定义

    2021-07-22 21:57:58
    float1 = 10; //不报错,10默认int,int和float都是 4字节 float f1 =10.1; //报错 10.1默认为Double类型 8字节 floatf1 = (float) 10.1; float f1 = 10.1f;
  • 看如下代码: #include<stdio.h> int main() { ... float a,area; a = 1.0 / 2 * (i + j + k); area = a * a; printf("%.2f\n", a); printf("%.2f\n", area); a = 1 / 2 * (i + j + k)...
  • 首先了解 “零值” 的含义: 题目中要求的是 零值比较 ,而非与0进行比较,在C/C++里“零值”的范围很大,可i是 0 ...根据布尔类型的语义,零值为“假”(记为...if (p) // 容易让人误解p是bool型变量 if (!p)  
  • private float a,b,c; string temp=console.readline(); float.TryParse(temp,out a); temp=console.readline(); float.TryParse(temp,out b); temp=console.readline(); float.TryParse(temp,out c);
  • 怎样确定 float 类型变量的有效数字个数?
  • float 类型变量未初始化带来的后果

    千次阅读 2012-08-08 11:41:44
    最近在辅导学生的过程中遇到一些问题特别奇怪,有一部分同学写的代码在自己机子上运行会崩溃,但是在别人的机子上运行一切正常,最后发现是float类型的变量未初始化造成的后果。测试程序如下 #include int main...
  • 浮点型变量和字符型变量

    千次阅读 2019-04-18 21:46:04
    今天来说说起浮点型变量和字符型变量 顾名思义,浮点类型变量是用来存储带有小数的实数的。 C语言中有三种不同的浮点类型,以下是这三种不同类型的声明示例: float Amount; /单精度型/ double; /双精度型/ ...
  • 浮点数的表示是不精确的,不能直接比较两个数是否完全...float型变量和“零值”比较的方法: const float EPSINON = 0.000001; if ((x >= - EPSINON) && (x 浮点型变量并不精确,其中EPSINON是允许的误差(即精度)
  • double a=1/5; cout double a1=1.0/5; cout
  • 拿赋零值做举例,给float型变量赋零值
  • float变量与零值的比较 .

    千次阅读 2014-02-18 14:16:02
    float和double型变量都是不精确的,所以不可以使用“==”或“!=”来比较float变量与数字,应使用“>=”或“ 正确写法: const float NORM = 0.00001; float flag = 0.0; if((flag>=-NORM) && (flag { printf(...
  • float : 占 4 字节,7 位有效数字 double :占 8 字节,15~16 位有效数字 浮点数的表示是不精确的,float 和 double 都不能保证可以把所有实数都准确的保存在计算机中。测试例子如下: ...
  • 分别写出bool,int,float,指针类型的变量a与“零”的比较语句 BOOL : if ( !a ) or if(a) int : if ( a == 0) float : const EXPRESSION EXP = 0.000001  if ( a &lt; EXP&amp;&amp; a &gt;-EXP...
  • C语言基础面试题之——BOOL,int,float,指针类型的变量a 与“零”的比较 int型: if(0 == n) if(0 != n) Bool型: if(n) if(!n) float型: const float EPSINON = 0.0001 if((n &amp;gt;= -EPSINON) ...
  • 试题 :分别给出 BOOL,int,float,指针变量 与“零值” 比较的 if 语句(假设变量名为 var) ... float 型变量:  const float EPSINON = 0.00001;  if ((x >= - EPSINON) && (x  指针变
  • BOOL : if ( !...float : const EXPRESSION EXP = 0.000001   if ( a -EXP) pointer : if ( a != NULL) or if(a == NULL) 不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“ EPSI
  • 分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句...var) int型变量: if(var==0) float型变量: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x 指针变量: if(var==NULL) 剖析: 考
  • float 与int 在运算时,都为自动变为double 但是 ``` int a = 1; float b = 1.0; printf("%d",sizeof(a+b)) ``` 为什么得到4,不应该是double 大小 8 吗?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,315
精华内容 68,526
关键字:

对float型变量a