问题标签 [bit-representation]
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.
r - 具有相同输入的相同函数返回不同的值
可以说我有一个如下功能:
当我在命令行上使用以下输入进行测试时:c(0.65, 0.3, 0.05),它会按预期打印并返回 TRUE。
但是,当我使用 c(1-0.3-0.05, 0.3, 0.05) 时,我会打印 TRUE 并返回 FALSE。这没有任何意义,因为它意味着 sum(testInputs)+1 是 2 但 sum(testInputs) 不是 1。
这就是我的想法:不知何故,打印值不完全是 1,但可能是 0.9999999...,并且它在显示器上四舍五入。但这只是一个猜测。这究竟是如何工作的?
c++ - C++ 和无符号类型
我正在阅读 C++ Primer 5th Edition,但我不明白以下部分:
在无符号类型中,所有位都表示值。例如,一个 8 位无符号字符可以保存从 0 到 255 的值(包括 0 到 255)。
“所有位代表值”是什么意思?
floating-point - 双数的表示
在8位表示中,我们知道数字4存储为00000100,数字-4存储为11111100。但是数字4.6如何存储在a中double
?
git - git 归档输出是否应该通过 git 版本进行位重复?
我正在使用git archive
生成一个文件,该文件稍后会被哈希以检查与预存储哈希的完整性。但是,我还没有看到任何git archive
旨在实现位可重复性的地方,所以我担心 git 本身、tar 或其他一些内部结构的任何未来变化可能会突然导致从同一个存储库生成不同的存档。
我是对的,这不是git archive
? 或者我可以像这样自信地使用它吗?
go - 为什么 32 字节哈希的长度是 267 位二进制而不是 256 位?
给定您散列一些字符串以产生 256 位输出,为什么二进制表示的长度不是 256
输出:
c++ - 如何检查 int 变量是否包含合法(不是陷阱表示)值?
语境:
这主要是对其他问题的跟进。OP 想猜测一个变量是否包含一个 int,我的第一个想法是在 C 中(如在 C++ 中)一个 int 变量只能包含一个 int 值。Eric Postpischil 提醒我,对于 int 类型,每个标准都允许陷阱表示......
当然,我知道大多数现代系统只使用整数的 2 补码表示,没有填充位,这意味着无法观察到陷阱表示。尽管如此,这两个标准似乎仍然允许有符号类型的 3 种表示形式:符号和幅度、一个补码和二进制补码。并且至少 C18 草案(n2310 6.2.6 类型表示)明确允许除 char 以外的整数类型的填充位。
问题
因此,在可能的填充位或非二进制补码符号表示的上下文中,int
变量可能包含符合实现的陷阱值。是否有可靠的方法来确保 int 变量包含有效值?
c - 使用C中的指针从int变量访问字符
为什么下面代码的输出是-127。为什么不应该是-1?
c - Can anyone help me with this exercise that i found online but i can't understand why the result is "aaaaaaaa". can you give me a hand?
i found this exercise online but i can't understand why the result is "aaaaaaaa". can you give me a hand ?
arrays - 如何将 uint64_t 存储在数组中?
我正在尝试将uint64_t
crc64 校验和的表示形式存储为数组。
校验和将始终为uint64_t res = 0x72e3daa0aa188782
,因此我希望将其存储为数组,char digest[8]
,其中digest[0]
72digest[1]
是 e3...digest[7]
是 82。
我尝试循环/除法来分解数字,但如果它是一个较小的整数,并且如果起点是 Base-10,因为起点是 Base-16,那么输出应该是所描述的以上。
更新: 我删除了无意义的代码,并希望我能接受所有三个答案,因为他们都按照我的要求做了。位移是我希望得到的答案,所以这就是它被接受的原因。
c++ - 指向不同类型的指针可以有不同的二进制表示吗?
我想知道是否允许 C++ 实现以不同的方式表示指向不同类型的指针。例如,如果我们有 4-byte sized/alignedint
和 8-byte sized/aligned long
,是否可以将指向 / 的指针表示int
为long
分别右移 2/3 位的对象地址?这将有效地禁止将指向指针的指针转换为指向指针long
的指针int
。
我问是因为[expr.reinterpret.cast/7]:
对象指针可以显式转换为不同类型的对象指针。当
v
对象指针类型的纯右值转换为对象指针类型“指向cvT
的指针”时,结果为static_cast<cv T*>(static_cast<cv void*>(v))
.[注7:将指向类型
T1
对象的“pointer to”T1
类型的指针转换为“pointer toT2
”类型(其中T2
是对象类型,对齐要求T2
不比的更严格T1
)并返回其原始type 产生原始指针值。——尾注]
第一句话表明我们可以将指针转换为任意两种对象类型。然而,(非规范性的)注释 7中的移情文本说,对齐在这里也起到了一定的作用。(这就是我想出这个的原因int
——long
上面的例子。)