- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑这个程序:
#include <stdio.h>
union myUnion
{
int x;
long double y;
};
int main()
{
union myUnion a;
a.x = 5;
a.y = 3.2;
printf("%d\n%.2Lf", a.x, a.y);
return 0;
}
输出:
-858993459
3.20
这很好,因为 int
成员使用 long double
成员的某些位进行解释。然而,反过来并不适用:
#include <stdio.h>
union myUnion
{
int x;
long double y;
};
int main()
{
union myUnion a;
a.y = 3.2;
a.x = 5;
printf("%d\n%.2Lf", a.x, a.y);
return 0;
}
输出:
5
3.20
问题是为什么 long double
没有被重新解释为一些垃圾值(因为它的 4 个字节应该代表整数)?这不是巧合,程序为 a.x
的所有值输出 3.20,而不仅仅是 5。
最佳答案
However, the reverse doesn't really apply
在小端系统上(多字节值的最低有效字节在最低地址),int
将对应于 long 的尾数的最低有效位双
。您必须非常精确地打印 long double
才能看到 int
对那些无关紧要的数字的影响。
在大端系统上,比如 Power PC 机,情况会有所不同:int
部分将与 long double
的最重要部分对齐,与符号位、指数和最高有效尾数位重叠。因此 x
的变化会对观察到的浮点值产生巨大影响,即使只打印了几个有效数字。但是,对于较小的 x
值,该值似乎为零。
在 PPC64 系统上,程序的以下版本:
int main(void)
{
union myUnion a;
a.y = 3.2;
int i;
for (i = 0; i < 1000; i++) {
a.x = i;
printf("%d -- %.2Lf\n", a.x, a.y);
}
return 0;
}
什么都不打印
1 -- 0.0
2 -- 0.0
[...]
999 - 0.0
这是因为我们正在创建一个全为零的指数字段,从而产生接近于零的值。然而,初始值 3.2 完全被破坏了;它不仅会扰乱最低有效位。
关于c - 联盟不重新诠释值(value)观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033111/
我正在阅读 J. P. Mueller 和 J. Cogswell 的“C++ All-in-One for Dummies”,偶然发现: #include using namespace std;
如果我们将float 和double 类型设置为NaN,那么它们不等于任何东西,包括它们自己。 int 会发生这样的事情吗? 最佳答案 如果将未初始化的变量与其自身进行比较,任何事情都可能发生。毕竟是
我正在学习中断和键盘硬件中断,例如中断 9(在 dos 中)。我注意到,如果我按下箭头键(左、右、上、下),那么将会有两个连续的中断。第一个是“Shift”按钮中断,第二个是我按下的箭头键。 我注意到
我今天开始使用 apple swift(和其他许多人一样;)),但我很难阅读 plist。 我从我的 info.plist 中读取了一个 plist 条目,它是一个 NSArray,其中每个条目都是一
这里是初学者。所以我试图让这段代码打印每年的总值(value)。我为每个值输入了 10,对于第 3 年,它返回 126,而我期望为 120。另外两年返回正确的值 120。我无法弄清楚为什么这没有按预期
考虑以下程序(参见现场演示 here) import std.stdio; void main() { int i=int(); writefln("i is %d",i); } 在像 C
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: C# - Basic question: What is ‘?’? 我在函数参数中找到了这条语句。 publ
这个问题在这里已经有了答案: Flexible Array Member (Zero Length Array) [duplicate] (2 个答案) How to include a dynam
可能是个小问题,但是 我试图使用 C Sharp 将“输出”参数传递给存储过程,但出现错误,直到我使用以下语法传递“输出”变量: int? ROWID = 0; ADAPTER.INSERT(val1
来自 Understanding Unix Programming,第 1.6 章,more01.c 示例: int see_more(), reply; 我tried一些类似的代码: #includ
我最近了解到,C/C++ 中的 long 与 int 的长度相同。简单地说,为什么?甚至在语言中包含数据类型似乎几乎毫无意义。它是否有任何 int 没有的特定用途?我知道我们可以像这样声明一个 64
私有(private)整数? _City_Id; 最佳答案 在不知道您要回复的目标语言的情况下,在 C# 2.0 中? 表示可为 null 的值类型。 Nullable value types (de
从几天以来,我一直致力于更新服务器项目的代码。发现一行我看不懂(被注释了) 首先,我得到: int *t; 然后我得到这个(评论): t[*t]; 这个“t[*t]”是什么类型 最佳答案 类型是 in
好吧,我正在为一个项目做这个,每当我试图让它除以零或平方根一个负数时,程序就会关闭。我试图找到一些我可以插入到代码中的东西,让它显示一条消息,然后再次提示输入值,但是我尝试插入的所有内容都会导致程序在
def create_board(): b = [[['',''] for i in range(8)] for j in range(8)] return b game_board
整数 x;所以变量将有 2 个字节的内存。现在,如果我输入 66 并且因为 scanf() 带有 %d,66 将存储在 2 字节内存中,因为该变量被声明为 int。 现在在带有 %c 的 printf
我是一名优秀的程序员,十分优秀!