From my point of view, hex and octal are just more convienient ways to write binary.
Hex/octal/binary numbers are not negative without some convention to make them so. This varies.
The C language, and those that borrowed from it, make the tacit assumption that the high bit indicates a negative number unless it is declared unsigned, in which case it is just a binary number in the range of 0 - UINT_MAX (from limits.h) I don't know of any languages where you can write -0x123 for a negative hex number.
I should mention that I am not particularly a language pedant. I currently use C/C++ for some application work and drivers, I write firmware for a propriatary processor in a much modified, self maintained assembler, and do scripting in perl as necessary. Plus whatever needs be done. I'm not a purist. I really wasn't trying to pick nits.