首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一个长双字符在一个字符串中只占10个字节?

问为什么一个长双字符在一个字符串中只占10个字节?
EN

Stack Overflow用户
提问于 2021-04-11 13:05:02
回答 1查看 287关注 0票数 1

我有一个问题:long double的大小是16 bytes,当我检查sizeof()没有问题时,它返回16,但是我做了这个小程序,用零填充一个16字节的字符串,使用long double强制转换,但是它只填充了10字节的零,而不是16字节,只比long和double多两个,为什么会这样呢?

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
    char s[17] = "aaaaaaaaaaaaaaaa";

    *((long double *)s) = 0.L;
    for (int i = 0; i < 16; i++)
        printf("%d", (int)s[i]);
    write(1, "\n", 1);
    return (0);
}

输出:

代码语言:javascript
复制
0000000000979797979797

而不是:

代码语言:javascript
复制
0000000000000000

对于double,它的输出很好:

代码语言:javascript
复制
000000009797979797979797

那么为什么它适用于double而不是long double呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-11 13:28:38

这是因为大多数实现只使用80-bit (10 bytes)进行long double表示(从维基百科):

在x86体系结构上,大多数C编译器实现长双作为x86硬件支持的80位扩展精度类型(通常存储为12或16字节以维护数据结构对齐),如C99 / C11标准(IEC 60559浮点算法(附件F))中所指定的那样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67045315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档