#include <stdio.h>
int main()
{
double x = 12.5;
printf("%d\n",x);
int y = 10;
printf("%lf\n",y);
}
输出:
0
0.000000
float x = 12.5;
printf("%d\n", x);float: 1位符号位(s)、8位指数(e),23位尾数(m,共32位)
double: 1位符号位(s)、11位指数(e),52位尾数(m,共64位)
然后,我们还需要了解一下printf由于类型不匹配,所以,会把float直接转成double,注意,12.5的float和double的内存二进制完全不一样。别忘了在x86芯片下使用是的反字节序,高位字节和低位字位要反过来。所以:
float版:0x41480000 (在内存中是:00 00 48 41)
double版:0x4029000000000000 (在内存中是:00 00 00 00 00 00 29 40)
而我们的%d要求是一个4字节的int,对于double的内存布局,我们可以看到前四个字节是00,所以输出自然是0了。 这个示例向我们说明printf并不是类型安全的,这就是为什么C++要引如cout的原因了。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int x = 1;
printf("%d\n", x);
return 0;
}
符号位
指数位
小数部分
指数偏移量
单精度浮点数
1 位[31] |
8位 [30-23] |
23位 [22-00] |
127 |
双精度浮点数
1 位[63] |
11 位[62-52] |
52 位[51-00] |
1023 |
inti=2;
4个字节就是00000000000000000000000000000010
然后根据你的printf格式,
float解析:
高位0表示正数,
指数8位都是0,那么就是-127次方,然后...尾数已经不用考虑了~
-127次方,
得到的结果基本是0,
以float6-7位的精度,
显然得到的结果是0...
(2的-127次方,估计得接近40位小数才有非0值出现)
分享到:
相关推荐
- `printf("int_x=%d\n", int_x);`:输出用户输入的整数`int_x`。 - `printf("float_y=%f\n", float_y);`:输出用户输入的浮点数`float_y`。 - `printf("double_z=%g\n", double_z);`:输出用户输入的双精度...
printf("%d,%d\n",++a,j--); } ``` 6. C语言程序的三种基本结构是:顺序结构、选择结构和循环结构。 7. 已知a=13,b=6,a||b的十进制数值为1。 8. 设a=3,b=4,c=4,则表达式a+b>c&&b==c&&a||b+c&&b==c的值为1。 9. 设...
printf("%d\n", printf("%d", printf("%d", i))); return 0; } ``` **解释:** 该程序的输出为 `4321`。这是因为 `printf` 函数的返回值是输出的字符数。当执行 `printf("%d", printf("%d", i))` 时,内层的 `...
表达式x%=(n%2)在C语言中会先计算n%2的结果,如果n是5,那么n%2等于1,然后x%=1相当于x=x%1,对于x=12,x%1的结果是0,所以第3题答案是A)0。 在C语言中,字符串是以字符数组的形式存在的,因此第4题的定义语句创建...
printf("c=x+a=%d,d=y+b=%d\n",c,d); } 将main说明为返回void,即不返回任何类型的值 x,y被定义为long型 a,b,c,d被定义为int型 5->x 6->y 7->a 8->b x+a->c y+b->d 显示程序运行结果 of long x,y; int a,b,c,d; c=x+a...
- **示例**: `printf("%d", abs(-5));` - **`double cabs(struct complex znum)`** - **库**: `math.h` - **功能**: 返回复数`znum`的绝对值。 - **示例**: `struct complex z = {3, 4}; double result = cabs...
16. 有以下函数定义:void fun(int n, double x) {...} 假定以下选项中的变量都已正断界说并赋值,那么对函数fun的准确调用语句是? A) fun(int y, double m); B) k = fun(10, 12.5); C) fun(x, n); D) void fun(n,...
- **解析:** `a>b>c` 为假, `c-1>=d` 也为假, 执行`else` 分支, 输出d+2即4。 **18. 程序3输出结果** - **正确答案:** `3, 2, -3` - **解析:** `while` 循环中`z-->0` 表示先减后测试, `++x表示x先加1, 当x为5时...
十六进制数,零x开头 0x55(十六进制)=5*16+5(十进制) 类型:数据都必须有类型 boolean (8bit,不定的)只有true和false两个值 char 16bit, 0~2^16-1 (2^16=6万6) byte 8bit, -2^7~2^7-1 (2^7=128; 注意:两个 ...
35. 将一维双精度实数数组x的下标为i的变量的地址赋给指针变量p的语句为:double *p,x[10];int i=5;p=&x[i];。指针变量可以指向数组元素的地址。 36. 将数组a的首地址赋给指针变量p的语句是p=a;。指针变量可以指向...
printf("x = %d", x); ``` **3.3 顺序结构程序设计** 顺序结构是最简单的程序结构,按照代码书写的顺序依次执行。 #### 四、分支结构程序 **4.1 关系运算符和表达式** 关系运算符用于比较两个值,如 `==`(等于...
因此,`printf("%d",d);`在`fun`函数内部打印的是局部变量`d`的值,而在`main`函数中,`d`的值是全局变量`d`的值,所以最后的输出是84。 通过这些题目,我们可以了解到C语言中关于函数的关键概念,包括定义、调用、...
(b--<=0)`为假,所以执行`printf("1,0\n",a,b);`。 ### 12. 整数运算符 - **整数运算符**:第十二题询问哪个运算符的运算对象必须是整数。正确答案是**B. %**。取模运算符`%`仅适用于整数运算。 ### 13. 循环次数...
printf("%d\n", i++ * i++); 打印出49。不管按什么顺序计算,难道不该是56吗? 33 3.3 对于代码int i=3; i=i++; 不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? 34 *3.4 有这样一个巧妙的...
printf("%d\n",i++*i++);打印出49。不管按什么顺序计算,难道不该是56吗? 3.3 对于代码inti=3;i=i++;不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? *3.4 有这样一个巧妙的表达式:a^=b^=a^=b;它...
printf("%d\n", i++ * i++); 返回 49?不管按什么顺序计算, 难道不该打印出56吗? o 4.3 对于代码 int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为 4, 哪个是正确的? o 4.4 这是个巧妙的表达式...
System.out.printf("输入的数字:%d\n", s.nextInt()); ``` 2. **使用 `BufferedReader` 获取输入**:在 Java 5.0 之前,通常使用 `java.io.BufferedReader` 来获取用户输入。 - 示例代码: ```java ...
例如定义一个包含N 个指向返 回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。. . 4 1.9 main() 的正确定义是什么? void main...
在此例子中,函数`fun(int n, double x)`需要两个参数,一个是整型,另一个是双精度浮点型。因此,正确调用应为`fun(10, 12.5);`。 **8. 字符串的赋值** - **知识点**: 字符串赋值的方法。 - **解释**: 字符数组...