Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is 0x00000100 = 256?

Tags:

c

binary

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

like image 237
Wang-Zhao-Liu Q Avatar asked Nov 20 '13 17:11

Wang-Zhao-Liu Q


People also ask

What is value of 0x10000?

Numbers that begin with 0x are interpreted as hexadecimal (base 16) in C. So 0x10 == 16 , and 0x100 == 256 , 0x10000 == 65536 , etc.

What does 0x100 mean?

Introduction to hex For example, 0x100 means 'the hexadecimal number 100' (=256 in decimal). Decimal. Hexadecimal. 0.


3 Answers

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:

  • 20 = 0x1
  • 21 = 0x2
  • 22 = 0x4
  • 23 = 0x8
  • 24 = 0x10
  • 25 = 0x20
  • 26 = 0x40
  • 27 = 0x80
  • 28 = 0x100
like image 150
Dietrich Epp Avatar answered Nov 02 '22 18:11

Dietrich Epp


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.

like image 29
trojanfoe Avatar answered Nov 02 '22 16:11

trojanfoe


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

like image 7
Korchkidu Avatar answered Nov 02 '22 17:11

Korchkidu