Shouldn't 0x00000100 = 4.
I understand that 0x00000001 = 1 since 2^0 and 0x00000010 = 2 since 2^1. What is wrong with my thinking?
initVariable(&variable1, "variable1", "1, 2, 3", 0x00000100);
assertIntegerEquals(variable1.address, 4); // 0x00000100 = 4?
My assertion fails because it says that 256 != 4
Numbers that begin with 0x are interpreted as hexadecimal (base 16) in C. So 0x10 == 16 , and 0x100 == 256 , 0x10000 == 65536 , etc.
Introduction to hex For example, 0x100 means 'the hexadecimal number 100' (=256 in decimal). Decimal. Hexadecimal. 0.
Numbers that begin with 0x
are interpreted as hexadecimal (base 16) in C.
So 0x10 == 16
, and 0x100 == 256
, 0x10000 == 65536
, etc.
Powers of two are:
No, the 0x
means hexadecimal (i.e. base-16) and not binary, which is what you seem to be confusing it with.
If you want to use binary literals in your code, then see this SO question, which mentions the gcc extension that allows 0b00000100
to be used to represent 4
in binary.
0x00000100
is in base-16 because 0x
prefix means you are using hexadecimal notation.
So 0x00000001
= 1*160 = 1, 0x00000010
= 1*161, 0x00000100
= 1*162 = 256 and 0x00000123
= 1*162 + 2*161 + 3*160 = 256 + 32 + 3 = 291
To play with base-2, base-10 and base-16 notation, you can try this site: http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With