大小端模式,栈的生长方向和内存的存放方向

  1. /* 
  2. 栈的生长方向和内存的存放方向 
  3. 栈的开口向下,高地址在上,低地址在下 
  4. 内存的存放方向:自下向上 
  5. 大端模式下:栈的高地址对应数据的低位 
  6. 小端模式下:栈的高地址对应于数据的高位 
  7. */  
  8. #define _CRT_SECURE_NO_WARNINGS  
  9. #include <stdio.h>  
  10. #include <stdlib.h>  
  11. #include <string.h>  
  12. //1. 栈的生长方向  
  13. void test01(){  
  14.   
  15.     int a = 10;  
  16.     int b = 20;  
  17.     int c = 30;  
  18.     int d = 40;  
  19.   
  20.     printf("a = %d\n", &a);  
  21.     printf("b = %d\n", &b);  
  22.     printf("c = %d\n", &c);  
  23.     printf("d = %d\n", &d);  
  24.   
  25.     //a的地址大于b的地址,故而生长方向向下  
  26. }  
  27.   
  28. //2. 内存生长方向(小端模式)  
  29. void test02(){  
  30.   
  31.     //高位字节 -> 地位字节  
  32.     int num = 0xaabbccdd;  
  33.     unsigned char* p = (unsigned char *)#  
  34.   
  35.     //从首地址开始的第一个字节  
  36.     printf("%x\n", *p);  
  37.     printf("%x\n", *(p + 1));  
  38.     printf("%x\n", *(p + 2));  
  39.     printf("%x\n", *(p + 3));//此处指针指到数据部分最上端,即输出为aa,栈的高地址对应于数据的高位  
  40. }  
  41. void main()  
  42. {  
  43.     test01();  
  44.     test02();  
  45.     system("pause");  




int main( void )
{
short int a;
char x;

a = 0x1122;
printf("*(char*)&a = 0x%x\n", *(char*)&a );
printf("(char)a = 0x%x\n", (char)a );

return 0;
}
本例是测大小端用的,两个printf输出为:小端两个printf都为0x22,

大端:

printf("*(char*)&a = 0x%x\n", *(char*)&a ); 0x11
printf("(char)a = 0x%x\n", (char)a ); 0x22 short强转位char,保留的是数据的最低8位,非最低内存地址的值

UINT64 test64 = 0X12345678;

UINT32 test32 = test64; /* 不管是大端还是小端,test32的值都是0x12345678 */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值