Tag: 类型

如何从s64值中删除前3个字节和最后一个字节?

代码: s64 end_time; struct timespec ts; getrawmonotonic(&ts); end_time = timespec_to_ns(&ts); 如何从end_time删除前三个字节并从中end_time最后一个字节? 我想将它存储在uint32中。 谁能告诉我怎么做? uint32 latency; fscanf(fp, “%lu\n”, latency); //fp is reading the end_time and storing in latency. latency = (uint32) (latency >> 8) & 0xFFFFFFFF;

简单的C数据类型

可能重复: int8_t,int_least8_t和int_fast8_t的区别? 我很困惑。 我想……(如果我错了,请纠正我) u_int8_t = unsigned short ? u_int16_t = unsigned int ? u_int32_t = unsigned long ? u_int64_t = unsigned long long ? int8_t = short ? int16_t = int ? int32_t = long ? int64_t = long long ? 然后int_fast8_t是什么意思? int_fastN_t ? int_least8_t ?

在具有两种体系结构的嵌入式系统中使用的整数和布尔类型

我正在为嵌入式系统编写一些软件,主要是在C语言中。它恰好是双核TI平台,我使用的是一些供应商和其他库。 处理器有一个32位的ARM内核,可以进行字节访问( sizeof(char) == 1和sizeof(int) == 4 :8和32位)和一个C28内核,它是一个32位CPU sizeof(char) == sizeof(int) == 1 :两者都是16位( 是的,真的 )。 我打算避免使用像int和char这样的类型来支持我总是明确我在做什么。 无论如何我会计划这个,但是当“char”有点叛逆并且不总是8位时我会加倍。 但是,我有很多整数和布尔值定义(和浮点数,但我们不用担心它们)可供我使用,具体取决于我包含的确切数量和数量: 在ARM方面: // from the ARM compiler’s include dir typedef signed char int8_t; typedef unsigned char uint8_t; typedef short int16_t; typedef unsigned short uint16_t; typedef int int32_t; typedef unsigned int uint32_t; typedef long long int64_t; typedef unsigned […]

数据类型问题

我正在尝试将C程序移植到具有以下类型声明的SPARC体系结构 #include typedef uint32_t WORD ; typedef uint64_t DWORD ; 麻烦的是,编译器告诉我stdint.h无法找到。 因此,我重新定义了这些数据类型如下: unsigned int WORD; unsigned long DWORD; 对我来说,这似乎是一个直截了当的声明,但该计划并没有预料到它应该如此。 我可能会错过什么吗? 谢谢

使用stdint.h和ANSI printf?

我正在写一个bignum库,我想使用高效的数据类型来表示数字。 特别是数字的整数,以及加法和乘法时中间表示的长(如果严格地说是整数的两倍)。 我将使用一些C99function,但试图符合ANSI C. 目前我的bignum图书馆中有以下内容: #include #if defined(__LP64__) || defined(__amd64) || defined(__x86_64) || defined(__amd64__) || defined(__amd64__) || defined(_LP64) typedef uint64_t u_w; typedef uint32_t u_hw; #define BIGNUM_DIGITS 2048 #define U_HW_BITS 16 #define U_W_BITS 32 #define U_HW_MAX UINT32_MAX #define U_HW_MIN UINT32_MIN #define U_W_MAX UINT64_MAX #define U_W_MIN UINT64_MIN #else typedef uint32_t u_w; typedef uint16_t u_hw; #define BIGNUM_DIGITS 4096 […]

我什么时候可以逃脱未通过签名声明int?

在C中,应该使用关键字signed来声明像-1这样的有符号整数,如下所示: signed int i = -1; 但是,我试过这个: signed int i = -2; unsigned int i = -2; int i = -2; 所有3个案例用printf(“%d”, i);打印出-2 printf(“%d”, i); 。 为什么?

区分数据类型和数据结构

好吧,不管怎样,即使在阅读了很多教科书(真的很多)之后,在互联网上待了很长时间,我仍然无法完全理解这两件事之间的区别是什么。 为了简化问题,根据维基百科说的数据类型是: 标识确定该类型的可能值的各种类型数据之一的分类,例如实数,整数或布尔值; 可以对该类型的值执行的操作; 数据的含义; 以及可以存储该类型的值的方式。 它主要是一些抽象数据类型的实现,如实数或整数。 一切顺利,然后是数据结构: 是一种在计算机中组织数据的特殊方式,可以有效地使用它。[1] [2] 数据结构可以实现一个或多个特定的抽象数据类型,这是指定操作合同及其复杂性的手段。 相比之下, 数据结构是ADT提供的合同的具体实现 。 因此,数据结构是ADT的实现,比如堆栈或队列。 但这不会使它成为一种数据类型吗? 我能真正看到的是,数据类型的范围可以从没有任何结构组织的非常简单的事物到复杂的数据结构,真正重要的是它们是ADT的实现,反映了它的重要方面,并且可以设想它们作为单个实体(如列表或树),但数据结构必须包含至少某种逻辑或数学组织才能归类为数据结构,但遗憾的是,这种差异会使许多实体同时成为数据结构和数据类型。 那么简单的普通(数据类型)和(数据结构)之间的区别是什么? 我很乐意接受一个答案,指出一个关于这个主题的特定书籍,这个书足以解释所有这些问题,如果有人可以推荐我一些关于C语言数据结构的好书。

声明具有存储类说明符但没有类型说明符的变量是什么意思?

阅读ANSI C Yacc语法规范后,我注意到以下内容都是有效的: register x; auto y; static z; extern q; 这对我来说似乎很奇怪,因为我对类型的理解表明这些变量都没有类型。 这些是什么意思? 他们如何打字? 分配了多少内存?

为什么不从返回int32_t的函数返回0x80000000导致警告?

考虑: int32_t f() { return 0x80000000; } 为什么不会导致编译器警告(至少在GCC上)? 0x80000000超出int32_t的范围( INT32_MAX为0x7fffffff )。 我相信这应该导致一个隐含的演员 – 这是正确的吗? 进一步的评论: if (f() == 0x80000000) foo(); 以上原因导致GCC没有任何警告。 然而 int32 ret = f(); if (ret == 0x80000000) baz(); 导致“警告:有符号和无符号整数表达式之间的比较”。 我相信这是因为0x80000000的类型为unsigned int因为它超出了int的范围。 那是对的吗? 假设我的假设都不对,为什么第一次比较不会引起警告?

sizeof(int)<= sizeof(long)<= sizeof(long long)总是如此?

从C标准来看,int具有至少16位,长度至少为32位且长度至少为64位(如果有的话)(某些平台可能不支持)。 只是想知道作为标题的句子是否总是正确的。