Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why use hex?

Tags:

c++

c

hex

Hey! I was looking at this code at http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html

I noticed that in some situations they used hex numbers, like in line 134:

for (j = 1; val && j <= 0x80; j <<= 1, q++) 

Now why would they use the 0x80? I am not that good with hex but I found an online hex to decimal and it gave me 128 for 0x80.

Also before line 134, on line 114 they have this:

small_n = (n & 0xffff0000) == 0; 

The hex to decimal gave me 4294901760 for that hex number. So here in this line they are making a bit AND and comparing the result to 0??

Why not just use the number? Can anyone please explain and please do give examples of other situations.

Also I have seen large lines of code where it's just hex numbers and never really understood why :(

like image 989
AntonioCS Avatar asked Oct 28 '08 15:10

AntonioCS


People also ask

What are the advantages of hex?

The biggest advantage of hexadecimal number is that it is really compact. This is a base-16 number and for that reason, they can represent a number in the least amount of characters. As decimal is a base-10 number and it is a base-16 number which includes around 16 different characters.

Why do people prefer to use hexadecimal?

Hexadecimal uses digits that more closely resemble our usual base-10 counting system and it's therefore easier to decide at a glance how big a number like e7 is as opposed to 11100111. Higher information density. With 2 hexadecimal digits, we can express any number from 0 to 255.

Why do technicians use hex?

Hex codes are used in many areas of computing to simplify binary codes. It is important to note that computers do not use hexadecimal - it is used by humans to shorten binary to a more easily understandable form. Hexadecimal is translated into binary for computer use.

Why is hex used more than binary?

It is much easier to write numbers as hex than to write them as binary numbers. 11010100 in binary would be D4 in hex.


2 Answers

In both cases you cite, the bit pattern of the number is important, not the actual number.

For example, In the first case, j is going to be 1, then 2, 4, 8, 16, 32, 64 and finally 128 as the loop progresses.

In binary, that is,

0000:0001, 0000:0010, 0000:0100, 0000:1000, 0001:0000, 0010:0000, 0100:0000 and 1000:0000.

There's no option for binary constants in C (until C23) or C++ (until C++14), but it's a bit clearer in Hex: 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, and 0x80.

In the second example, the goal was to remove the lower two bytes of the value. So given a value of 1,234,567,890 we want to end up with 1,234,567,168.
In hex, it's clearer: start with 0x4996:02d2, end with 0x4996:0000.

like image 143
James Curran Avatar answered Oct 06 '22 05:10

James Curran


its a bit mask. Hex values make it easy to see the underlying binary representation. n & 0xffff0000 returns the top 16 bits of n. 0xffff0000 means "16 1s and 16 0s in binary"

0x80 means "1000000", so you start with "00000001" and continue shifting that bit over to the left "0000010", "0000100", etc until "1000000"

like image 30
Jimmy Avatar answered Oct 06 '22 03:10

Jimmy