zil*_*n01 12 boolean language-design internal-representation
我正在设计一种语言,并试图决定是否true应该是0x01或0xFF.显然,所有非零值都将转换为true,但我正在尝试确定精确的内部表示.
每种选择的优缺点是什么?
cas*_*One 29
无关紧要,只要它满足外部表示的规则即可.
我会在这里接受C的提示,其中false绝对定义为0,而true定义为非假.与真实的绝对值相比,这是一个重要的区别.除非您的类型只有两种状态,否则您必须考虑该值类型中的所有值,什么是真,哪些是假.
Ada*_*vis 22
0为假,因为处理器具有在寄存器设置为零时设置的标志.
没有其他标志设置在任何其他值(0x01,0xff等)上 - 但当寄存器中存在非零值时,零标志设置为false.
所以这里的答案主张将0定义为false,将其他任何内容定义为true是正确的.
如果要"定义"默认值为true,则0x01优于大多数:
-亚当
mou*_*iel 11
你为什么选择非零值是真的?在Ada中,true为TRUE,false为FALSE.BOOLEAN没有隐式类型转换.
tva*_*son 11
使用-1在弱类型语言中有一个优点 - 如果你陷入困境并使用按位运算and符而不是逻辑and运算符,只要其中一个操作数已转换为规范布尔表示,您的条件仍将正确计算.如果规范表示为1,则不是这样.
0xffffffff & 0x00000010 == 0x00000010 (true)
0xffffffff && 0x00000010 == 0xffffffff (true)
Run Code Online (Sandbox Code Playgroud)
但
0x00000001 & 0x00000010 == 0x00000000 (false)
0x00000001 && 0x00000010 == 0xffffffff (true)
Run Code Online (Sandbox Code Playgroud)
IMO,如果你想坚持假 = 0x00,你应该使用0x01.0xFF通常是:
要么
在这两种情况下,它可能意味着错误.因此,来自可执行文件的*nix返回值约定,即true = 0x00,并且任何非零值都是false.