首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >uint8,uint16和uint32的尺寸?

uint8,uint16和uint32的尺寸?
EN

Stack Overflow用户
提问于 2014-04-03 15:48:08
回答 2查看 154.9K关注 0票数 16

我使用的代码使用的类型包括uint8 (1字节宽无符号整数)、uint16 (2字节宽无符号整数)、uint32 (4字节宽无符号整数)等。

我的问题是:

  • uint8char的尺寸一样吗?

  • uint16int的尺寸一样吗?

  • uint32long的尺寸一样吗?

  • uint64double的尺寸一样吗?

例如:

代码语言:javascript
运行
复制
uint8 c[20];

这个不应该是20块吗?

我在中编写了一些代码:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <string.h>
typedef unsigned int uint32;
typedef unsigned int uint8;

int main()
{
    double a = 1320.134;
    uint32 b;
    uint8 c[20];
    b = (unsigned int)a;
    c[3] = b;
    printf("value is %d", c[3]);
    return 1;
}

但在调试模式下,c的大小为50。为什么会这样呢?

EN

回答 2

Stack Overflow用户

发布于 2014-04-03 16:16:52

uint8uint16uint32uint64可能是微软特有的类型.

在1999年的标准中,C支持具有类似含义的标准类型,在<stdint.h>中定义为:uint8_tuint16_tuint32_tuint64_t。我假设特定于微软的类型也是类似定义的。微软确实支持<stdint.h>,至少在Visual 2010的时候是这样,但是旧代码可能使用uint8等。

预定义类型charshortint等的大小因C实现而异。C标准有一定的最低要求(char至少为8位,shortint至少为16位,long至少为32位,列表中的每种类型至少与前一种类型一样宽),但允许一些灵活性。例如,我见过int为16位、32位或64位的系统。

char几乎总是8位,但允许更宽。普通的char可以是签名的,也可以是无签名的。

uint8_t必须是完全8位宽的无符号整数类型。它很可能是用于unsigned char的typedef,但是如果普通char碰巧没有签名的话,它可能是普通char的typedef。如果没有预定义的8位无符号类型,那么uint8_t将完全不被定义.

类似地,每个uintN_t类型都是一个无符号类型,宽度正好是N位。

此外,<stdint.h>还定义了相应的有符号intN_t类型,以及至少具有指定宽度的int_fastN_tint_leastN_t类型。

[u]intN_t类型保证没有填充位,因此每个类型的大小都是N位。有符号的intN_t类型需要使用2‘s补码表示形式.

例如,尽管uint32_t可能与unsigned int相同,但您不应该假设这一点。如果需要至少16位宽的无符号整数类型,并且这是当前系统的“自然”大小,请使用unsigned int。当您需要完全32位宽的无符号整数类型时,请使用uint32_t

(不,uint64uint64_tdouble不一样;double是浮点类型。)

票数 25
EN

Stack Overflow用户

发布于 2014-04-03 16:00:35

很不清楚您是如何计算大小的(“调试模式下的大小”?)。

使用printf()

代码语言:javascript
运行
复制
printf("the size of c is %u\n", (unsigned int) sizeof c);

通常,您会用size_t打印一个%zu值(这是sizeof返回的类型),但是如果您使用的是Visual这样的前C99编译器,那么它就不能工作。

您需要在代码中找到定义自定义名称(如typedef等)的uint8语句;这些都是不标准的,因此这里没有人知道它们是如何在代码中定义的。

新的C代码应该使用<stdint.h>,这给您提供了uint8_t等等。

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

https://stackoverflow.com/questions/22842707

复制
相关文章

相似问题

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