C Programming - Floating Point Issues - Discussion

Discussion Forum : Floating Point Issues - General Questions (Q.No. 8)
8.
A float occupies 4 bytes. If the hexadecimal equivalent of these 4 bytes are A, B, C and D, then when this float is stored in memory in which of the following order do these bytes gets stored?
ABCD
DCBA
0xABCD
Depends on big endian or little endian architecture
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
36 comments Page 1 of 4.

Santhosh kumar m v said:   1 decade ago
When designing computers, there are two different architectures for handling memory storage. They are called Big Endian and Little Endian and refer to the order in which the bytes are stored in memory. Windows NT was designed around Little Endian architecture and was not designed to be compatible with Big Endian because most programs are written with some dependency on Little Endian.

These two phrases are derived from "Big End In" and "Little End In." They refer to the way in which memory is stored. On an Intel computer, the little end is stored first. This means a Hex word like 0x1234 is stored in memory as (0x34 0x12). The little end, or lower end, is stored first. The same is true for a four-byte value; for example, 0x12345678 would be stored as (0x78 0x56 0x34 0x12). "Big End In" does this in the reverse fashion, so 0x1234 would be stored as (0x12 0x34) in memory. This is the method used by Motorola computers and can also be used on RISC-based computers. The RISC-based MIPS computers and the DEC Alpha computers are configurable for Big Endian or Little Endian. Windows NT works only in the Little Endian mode on both computers.

Windows NT was designed around Little Endian architecture. The Hardware Abstraction Layer (HAL) is written so that all operating system-related issues are automatically handled. Therefore, it is possible to create a HAL that could work on Big Endian architecture. The basic problem with porting the code has to do with the way the code is written for all programs. Code is often written with the assumption that Big Endian or Little Endian is being used. This may not be specific to the HAL; it could be something as simple as bit masking for graphics. To clarify this concept more, two programming examples follow.

Krunal said:   2 decades ago
"Little Endian" means that the lower-order byte of the number is stored in memory at the lowest address, and the high-order byte at the highest address. For example, a 4 byte Integer

ABCD

will be arranged in memory as follows:
Base Address+0 Byte0
Base Address+1 Byte1
Base Address+2 Byte2
Base Address+3 Byte3

Intel processors (those used in PC's) use "Little Endian" byte order.
"Big Endian" means that the high-order byte of the number is stored in memory at the lowest address, and the low-order byte at the highest address. The same 4 byte integer would be stored as:

Base Address+0 Byte3
Base Address+1 Byte2
Base Address+2 Byte1
Base Address+3 Byte0

Motorola processors (those used in Mac's) use "Big Endian" byte order.

Kavita said:   1 decade ago
Krunal was rite about the processors architecture but explanation for Little and Big Endian architecture got reversed.

Here a Proper and Correct Explanation.

Consider the storage of the value ABCD
Here,

A-MSB(Most Significant Byte).
B
C
D-LSB(Least Significant Byte).

In Little Endian Architecture, LSB is at the lowest address of the memory location. Suppose memory location starts with 0
D->0
C->1
B->2
A->3
Intel Processors(CPUs) are Little Endian.

In Big Endian Architecture, MSB is at the lowest address of the memory location. As shown below.
A->0
B->1
C->2
D->3
While Motorola 680x0 CPUs are big-endian

For more details and confirmation visit : http://en.wikipedia.org/wiki/Endianness#Big-endian

Avi said:   1 decade ago
Simple answer (stack) :

For example memory location occupied for float (4 byte (32 bit) ) (1000 to 1003) and hex is ABCD (00001010 00001011 00001100 00001110).

MSB A B C D LSB.

Little endian architecture:- Lower byte (LSB) store first so,

1000-D.
1001-C.
1002-B.
1003-A.

Big endian architecture:- Higher byte (MSB) store first so,

1000-A.
1001-B.
1002-C.
1003-D.
(4)

Sandeep said:   1 decade ago
What kavitha said was up to the mark. But it is for 8 bit processors.

What we generally use are all of 16-bit processors.

So in ABCD.

CD will be allocated consecutive 2 bytes (16-bit).

And then AB will be allocated consecutive 2 bytes.

For more info refer to any microprocessors text.

Achal said:   1 decade ago
Hi bro I have doubt to store float value in given memory locations compiler follows IEEE 754 method, not endianness method.

I think endianness is for storing integer variable only.

Any info share with me I'm waiting.
(1)

Anusha said:   1 decade ago
Thank you Krunal and Kavitha.

I had a doubt if I had to store 01020304 in little endian, according to ur discription it is 04030201 but why it could not be 40302010 ?

Anusha said:   1 decade ago
Why is the concept of little or big endian followed? Why can't people stick on to 1 particular method following a standard what difference does it make?

Kingstan_BE_EIE said:   1 decade ago
Actually for all the compiler the basic data structure will vary according to the algorithm and architecture .

Moshii said:   1 decade ago
THAK YOU ALL, I have question. Why Little Endian and Big Endian?

Please give me a proper answer.


Post your comments here:

Your comments will be displayed after verification.