为什么大多数计算机编程语言都不允许二进制数用作十进制或十六进制?
在VB.NET中,您可以编写十六进制数字,如&H4
在C中你可以写一个十六进制数字,如0x04
为什么不允许二进制数?
&B010101
0y1010
奖励积分!...什么语言都允许二进制数?
编辑
哇! - 因此大多数人认为这是因为简洁和可怜的旧"波浪"认为这是由于二进制表示的技术方面.
因为十六进制(和很少八进制)文字更紧凑,使用它们的人通常可以比解密二进制数更快地在十六进制和二进制之间进行转换.
Python 2.6+允许二进制文字,Ruby和Java 7也是如此,您可以使用下划线使字节边界变得明显.例如,十六进制值0x1b2a
现在可以写为0b00011011_00101010
.
在C++ 0x中,用户定义的文字将支持二进制数,我不确定它是否会成为标准的一部分,但最坏的情况是你可以自己启用它
int operator "" _B(int i); assert( 1010_B == 10);
为了使位表示有意义,您需要知道如何解释它.您需要指定您正在使用的二进制数的类型(有符号/无符号,二进制补码,一对一补,有符号幅度).
我曾经使用过的唯一支持二进制数的语言是硬件描述语言(Verilog,VHDL等).它们都有严格(通常是令人困惑的)定义,如何处理以二进制形式输入的数字.
见perldoc perlnumber:
NAME perlnumber - semantics of numbers and numeric operations in Perl SYNOPSIS $n = 1234; # decimal integer $n = 0b1110011; # binary integer $n = 01234; # octal integer $n = 0x1234; # hexadecimal integer $n = 12.34e-56; # exponential notation $n = "-12.34e56"; # number specified as a string $n = "1234"; # number specified as a string
稍微偏离主题,但较新版本的GCC添加了一个允许二进制文字的C扩展.因此,如果您只使用GCC进行编译,则可以使用它们.文件在这里.