我正在设计一种语言,并试图决定是否 true 应为 0x01 或 0xFF。显然,所有非零值都将转换为 true,但我试图确定确切的内部表示。

每种选择的优点和缺点是什么?

有帮助吗?

解决方案

0 为假,因为处理器有一个标志,当寄存器设置为零时该标志被设置。

没有对任何其他值(0x01、0xff 等)设置其他标志 - 但当寄存器中存在非零值时,零标志设置为 false。

因此,这里提倡将 0 定义为 false,将其他任何值定义为 true 的答案是正确的。

如果您想“定义”默认值 true,那么 0x01 比大多数值更好:

  • 它在每个位长度和符号上表示相同的数字
  • 如果您想知道它是否正确、零标志是否不可用或使用成本昂贵,则只需要测试一位
  • 转换为其他类型时无需担心符号扩展
  • 逻辑和算术表达式对其作用相同

-亚当

其他提示

不要紧,只要它满足规则的外部表示。

我想你的意思选自C这里,其中假绝对定义为0,和真正的被定义为不假。相比真正的绝对值时,这是一个重要的区别。除非你有一个类型只有两种状态,你必须考虑到该值类型中的所有值,什么是真,什么是假的。

为什么你选择的是非零值是正确的?在阿达真正的真假是FALSE。没有隐式类型转换和从BOOLEAN。

使用-1具有一个优势,在弱类型语言 - 如果你陷入困境,并使用按位and操盘逻辑and运营商,你的病情仍然会只要一个操作数已转化为正确评价规范布尔表示。这是不正确的,如果规范表示为1。

  0xffffffff & 0x00000010 == 0x00000010 (true)
  0xffffffff && 0x00000010 == 0xffffffff (true)

  0x00000001 & 0x00000010 == 0x00000000 (false)
  0x00000001 && 0x00000010 == 0xffffffff (true)

IMO,如果你想坚持 错误的=0x00,你应该使用0x01。0xFF 通常是:

  • 某些操作溢出的迹象

或者

  • 错误标记

在这两种情况下,这可能意味着 错误的. 。因此,可执行文件的 *nix 返回值约定是 真的=0x00,任何非零值均为假。

-1长于1键入...

在最后它并不重要,因为0是假,别的是真实的,你绝不会比较真实准确的表示。

编辑,对于那些反对投票,请说明原因。这个答案是基本相同,目前额定功率为+19之一。所以这是对什么是基本相同的答案21票的区别。

如果是因为-1评论的,这是事实,究竟是谁定义了“真实”的人(例如:编译器作者)将不得不使用-1而不是1,假设他们选择使用确切表示。 -1是要采取长于1输入,并且最终结果将是相同的。该语句是愚蠢,它的意思是愚蠢的,因为在二者之间没有真正的区别(1或-1)。

如果你要标记下来的东西,至少为它提供了一个理由。

0xff的是奇数的选择,因为它有一个隐含的假设8位是您的最小存储单元。但它不是少见要更紧凑存储布尔值比。

也许你想思考布尔运算是否会产生一些仅仅是一个0或1位(其中工程无论符号扩展),或以另一种方式是全零或全1(并视签署符号扩展二进制补码的数量,以保持全1在任何长度)。

我觉得你的生活是0和1的简单。

的优点是无,而缺点是没有了。只要你提供整数到布尔自动转换,这将是任意的,所以它真的不要紧,你选择哪一个数字。

在另一方面,如果你没有让这个自动转换,你就会有一个亲:你不会在你的语言中的一些完全任意的规则。你不会(7 - 4 - 3) == false,或3 * 4 + 17 == "Hello",或"Hi mom!" == Complex(7, -2)

我认为C法是要走的途径。 0表示假,什么都意味着真。如果用其他映射真走了,那么你就只剩下为不确定值的问题 - 既不是真也不假。

如果这是你会被编译为具有特定表示特别支持特定指令集语言,那么我会让那个指引你。但是不存在任何附加信息,对于“标准”的内部表示,我会用-1去(全1二进制)。此值也延伸到任何你想要的大小布尔(单位,8位,16位,等等),如果你打破了一个“真”或“假”到一个较小的“真”或“假”,其仍然相同。 (其中,如果打破了16位= TRUE 0x0001的你会得到一个FALSE = 0×00和一个TRUE = 0×01)。

设计语言,使得0是虚假的非零是真实的。有没有需要“转换”任何事情,想“非零”,而不是某些特定的价值将帮助你正确地编写代码。

如果你有一个像“真”,那么就去选择一个值,但总觉得“非零是真实的”,而不是“0x01为真正的”内置符号。

不管你做什么,一旦你选择你的价值观不改变它们。中所述-77,真假定义为1和0。然后,FORTH-83重新定义它们为-1和0有一个不小(当然OK,只是少数,这是FORTH我们所谈论的)问题由此引起的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top