问题标签 [stdint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 带有 g++ 的 SDL:stdint.h:没有这样的文件或目录
我试图让 SDL 在 Windows 10 上使用 g++ 工作,但我收到一个错误,指出找不到 stdint.h。
我不确定我需要做什么来解决这个问题,所以任何帮助将不胜感激,谢谢!
c - 为什么 int_fast16_t 在 64 位系统上是 64 位?
我在我的实现中查看了头文件<stdint.h>
。我看到以下内容:
我有一个 64 位系统,所以 long int 占用 64 位。为什么所有三种数据类型都被定义为长整数?我了解 int_fast64_t 的情况,它是 64 位。但是为什么 16 位和 32 位数据类型有 64 位呢?这是某种错误吗?我创建了一个小程序来检查是否是这种情况:
这些数据类型实现的大小是否已定义?哪些特性或特征将数据类型定义为“快速”?是数据块从 RAM 加载到 CPU 的速度吗?如果int_fast16_t
和int_fast32_t
是 8 字节宽,那么在性能方面有什么好处?在64 位系统上访问 64 位数据类型真的更快吗?
c - 在“关于 size_t 和 ptrdiff_t”中解释这段话
在安德烈·卡尔波夫(Andrey Karpov)题为“关于size_t
和ptrdiff_t
”的博文中,他总结道
正如读者所见,使用 ptrdiff_t 和 size_t 类型为 64 位程序提供了一些优势。但是,它不是用 size_t 替换所有无符号类型的全面解决方案。首先,它不能保证程序在 64 位系统上的正确运行。其次,很可能由于这种替换,会出现新的错误,违反数据格式兼容性等等。您不应该忘记,在此替换之后,程序所需的内存大小也会大大增加。必要内存大小的增加会减慢应用程序的工作,因为缓存将存储更少的正在处理的对象。
我不理解这些说法,也没有在文章中看到它们,
“很有可能因为这个替换,会出现新的错误,违反数据格式兼容性等等。”
这怎么可能,在迁移和类型迁移导致错误之前怎么可能没有错误?目前尚不清楚类型 (size_t
和ptrdiff_t
) 何时似乎比它们要替换的类型更具限制性。
您不应该忘记,在此替换之后,程序所需的内存大小也会大大增加。
我不清楚所需的内存大小如何或为什么会“大大”增加或根本增加?我明白,如果它确实如此,安德烈的结论就会随之而来。
c++ - 用于在 C++ 中包装 stdint 变量的基对象和继承对象
我正在为使用 Sloeber(Eclipse 的 Arduino 插件)的 AVR 项目重构一些 C++ 代码。该项目有许多“设置”变量存储在 EEPROM 中,有上限和下限,需要字符串标签等。这些设置是不同的整数类型(uint8_t
,int32_t
等),我想要一个可以包含任何一个的包装器在这些类型中,一些方法继承自基类。我还希望能够形成所有设置变量的单个数组,以便我可以遍历它们。
一个简单的实现演示如下:
然后运行以下命令:
我的意图是这childObj.value
将是一个uint16_t
,而baseObj.value
将仍然是一个uint8_t
。
但是childObj.value
计算结果为57
,因此它仍被视为uint8_t
。关于实现这种事情的方法有什么想法吗?
c - 将 uint8_t 便携式重新解释为 int8_t 并强制补码
我正在尝试以可移植的方式将 uint8_t 重新解释为 int8_t (然后再返回)。我正在通过存储在 uint8_t 缓冲区中的串行通道接收数据,但是一旦我知道它是哪种数据包,我需要将一些字节解释为二进制补码,而将其他字节解释为无符号。
我知道这将适用于许多编译器:
但是当 u8>127 时,它不能保证工作,因为将大于 INT8_MAX 的值转换为 int8_t 是未定义的(我认为)。
我能想到的最好的就是这个
这应该总是有效的,因为减法总是会导致自动提升到 int,并且绝不依赖于底层表示。它隐含地强制对大于 INT8_MAX 的值进行二进制补码解释。
有没有更好的方法(或标准的 MACRO)来做到这一点?
ruby - 如何配置 Fedora 29 以使用 ruby 'number-theory' gem?
所以基本上RubyNumberTheory需要 NArray gem,而且它似乎需要一些本机编译工具,可能还需要一些额外的配置。所以在 Fedora 29 上,这是尝试过的
我确实安装了一些包,通过 dnf 之类gcc ruby-devel rubygems
的,group install "C Development Tools and Libraries"
甚至一些更意想不到arm-none-eabi-newlib
的。实际上,标题似乎很好地安装在系统上
即使环境变量设置如下:
gem 仍然不会安装,告诉 stdint.h 没有找到。还有什么可以尝试的?
c - 对象宏的最大尺寸
我试图写以下内容:
但是编译器给了我以下警告:
这听起来很合理。但无论如何,我想在当前实现/架构上分配一个最大可能大小的对象。RSIZE_MAX
中定义了宏Annex.B(19)
:
所以我尝试了以下示例:
但是没有效果,RSIZE_MAX
没有定义。如何在编译时使用此宏或任何其他方式来验证最大对象大小?
c - int_least16_t 是否有可能成为 int 的别名而不是 short 的别名?
从 C99 标准中,我可以看到 int_least16_t 保证具有至少 16 位的宽度。
7.18.1.2 最小宽度整数类型
...
typedef 名称 uint_leastN_t 指定一个宽度至少为 N 的无符号整数类型,因此没有更小尺寸的无符号整数类型至少具有指定的宽度。因此,uint_least16_t 表示宽度至少为 16 位的无符号整数类型。
...
据我所知,该标准仅对类型的最小宽度进行了限制,而不一定对它们的等级进行了限制。因此,在 int 和 short 都具有 16 位宽度的架构上,尽管 short 的等级较低,但 int_least16_t 是否可能是 int 的别名?
c - uint8_t 在达到 255 后不翻转到 0 无法正常工作
我是C-Headers的新手-stdint.h
和inttypes.h
. 我正在尝试一些代码以了解其uint8_t
工作原理。但是,它似乎遇到了问题。
我已经声明了 4 个uint8_t
整数,边界值分别为 0、255、256、-1,并对其执行了一些简单的算术运算。我这样做是因为我想知道c 编译器(我在 linux 上使用)会生成哪些错误/警告。gcc 5.4.0
如果没有,我很想知道输出是什么样子的。下面给出的代码。
这段代码的输出如下:
如前所述,我正在使用带有gcc 5.4.0
编译器的 Linux 机器。
我不明白为什么,对于变量ua84
,值0
在达到之后没有滚动到255
,而对于ua83
. 我认为,考虑到 255 之后的翻转,该值ua84
应该是18
.
我觉得这与编译时生成的与变量有关的隐式截断有关。我不知道这到底有什么问题。我也想知道我仍然想继续使用的方法。warning
ua83
uint8_t
c - 无法正确地将 uint64_t 转换为双精度。我错过了什么?
为了提供一些背景知识,我正在用 C 为 Java 8 编写 JVM,并且我正在尝试打印位于常量池中的 Double 值。
我有两个变量 uint32_t 代表双精度的高值和低值。我正在尝试打印这个双精度,但我无法弄清楚我的代码有什么问题。
我试过打印所有值来检查。
它打印double:4.61169e+18
但应该返回2
我错过了什么?