Giải thích giúp em tại sao ra như vậy?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
	
	typedef union
	{
		int ival;
		float fval;
		char ch[2];
	}value;
	
	 value a, b, x[10];
	 a.ival=0xa1b2;
	 printf("cha[0]=%x, char[1]=%x\n", a.ch[0], a.ch[1]);
	 
	return 0;
}

Tại sao a.ch[0]=0xb2 , a.ch[1]=0xa1 ??? Mà không phải là a.ch[0]=0xa1 , a.ch[1]=0xb2 ???

Nó do quy định cách lưu trữ của máy tính thôi bạn. Nếu lưu theo little-endian thì byte thấp lưu ở trước, byte cao lưu ở sau. Big-endian thì ngược lại. Các dòng máy tính sử dụng kiến trúc x86-64 lưu trữ theo little-endian nên thu được kết quả trên.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?