【发布时间】:2013-02-05 06:21:03
【问题描述】:
将一块内存初始化为零是惯用的
memset(p, 0, size_of_p);
当我们想将其初始化为负一时,我们可以:
memset(p, -1, size_of_p);
不管p是什么类型,因为在二进制的互补表示中,减一是8位整数为0xff,16位为0xffff,32位为0xffffffff。
我担心的是,这种两者的互补表示是否普遍适用于现代计算机领域?我可以期望这样的代码独立于平台并且足够健壮以移植到其他平台吗?
提前致谢。
【问题讨论】:
-
你的问题标题和你的问题 body 是相关的,但有点不一致。您的标题似乎在询问按位二进制补语是否普遍等效(最好是,因为它只是对位序列的位操作)。但是您的问题主体属于负值的表示(特别是
-1)以及 that 在覆盖类型的每字节级别上是否普遍独立于平台。它不是。所以你的问题标题的答案是yes;你的问题主体是no。 (无论如何我都读过它,但我认为阅读代码可能为时已晚)。 -
@WhozCraig 我改变了话题:D
标签: c memory language-lawyer twos-complement memset