in reply to Re^2: hexadecimal division
in thread hexadecimal division
Numbers are represented internally as integers or floats in binary format.
You are only free to use different base systems for the notation, see perlnumber .
But the division is always the same!
> the division or 0x05 by 0x10 that failed as the result was 0x30 not 0x00
really?
DB<17> p 0x05/0x10 0.3125 DB<18> p int(0x05/0x10) 0
But "\x10" is not a number it's a one-character string with the ASCII code 16 (= 0x10)
DB<25> p int(0x05/"\x10") Illegal division by zero at (eval 33)[C:/Perl_64/lib/perl5db.pl:646] l +ine 2.
"\x{Hex}" is just a way to use chr inside interpolated strings!
(See "escape sequences" in perlop#Quote-and-Quote-like-Operators for details.)
Stop using ASCII codes in strings for hex-numbers!
Perl is not C, it will ONLY try to treat a string which looks like a decimal number as it's look-a-like number, all others as number zero in numerical context.
DB<31> p "05"/"16" # strings with decimal(!) numbers 0.3125
Again Perl is not C and will NOT try to take the byte-code of a character as a number, (unless you use ord explicitly ) !
"\x10" doesn't look like a decimal number, it doesn't even look like any number at all!
It's just one character which has position 16 (=0x10) in the ASCII table.
DB<27> p ord("\x10") 16 DB<28> p "\x10" ► # not a number, hence 0
(NB: ► shows as ► on my display this is not a number, not even a character.
It's the Data_Link_Escape character in original ASCII, some OS try to overload it with something more meaningful.)
This can only succeed (somehow) if you use the ASCII-code of a number character.
Only the 10 characters "0".."9" look like a digit in ASCII.
DB<1> p ord("1") 49 DB<2> p ord("\x31") 49 DB<3> p 0 + "\x31" # string = "1" looks like number 1 DB<4> p 5 / "\x31\x36" # string = "16" looks like number 0.3125
I hope it's clearer now, since we already had this discussion in one of your last questions!
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Wikisyntax for the Monastery
|
---|