08是小于1,但07大于1在DOS /批。 为什么?(08 is less than 1, bu

2019-09-17 07:08发布

在DOS /批,

if 08 lss 1 echo true

呼应“真”。 这同样适用于09两个08和09都小于1。

然而,

if 07 lss 1 echo true

没有任何回音。 01至07是不小于1。

为什么? 特别之处是08和09?

Answer 1:

通常情况下,一家领先的0表示你想在被解析数八进制 。 我预计0809实际上是一个错误条件 ; 或许是批处理语言没有一个很好的机制,以表明输入是不正确的?



Answer 2:

延伸的sarnold和大卫·施瓦茨已经提供的答案...

我从来没有见过,指出,如果支持八进制或十六进制数字,符号的任何文件。 但是你的问题促使我做一些测试,而事实上它确实支持SET / A支持相同的数字符号。

  • 任何一组的数字[0-9]不从0开始被解释为小数。
  • 任何一组的数字[0-7]与0前缀被解释为八进制。
  • 任何一组的数字[0-9,AF,AF]前缀0x或0X被解释为十六进制。

任何一组不满足上述任何3个数字符号的字符将被视为一个字符串。

如果比较的两边都是有效的数字,那么数字做出比较。

如果任何一方不是一个有效的数字,然后用一个字符串做出比较。

07是一个有效的八进制符号具有7十进制值,它是不小于1。

08和09的前缀为0,但不是有效的八进制,所以字符串比较时。 任何以0开头的字符串将整理小于从1开始的字符串。

一些有趣的测试,以确认八进制和十六进制表示支持。

if 0xA equ 10 echo ok
if 011 equ 9 echo ok

它是轻度有趣的是,在SET无效八进制或十六进制格式/ A陈述引发错误。 但是,在一个IF语句无效八进制或十六进制表示不会引发错误。 它只是强制字符串比较。

更新

有效的电话号码可以被前面有一个符号指示符: - 或+

if +0xA equ +10 echo ok
if -011 equ -9 echo ok


Answer 3:

08和09都是非法的。 在八进制,7是最高的法律位。 的零引线数字表示表示为八进制的数。



文章来源: 08 is less than 1, but 07 is greater than 1 in DOS/Batch. Why?