基础练习二

  求较小的值,不能用 比较运算符 if-else ?: while for 内嵌汇编 递归 第三方函数

#include <stdio.h>   

// 要求写的函数   

int Min(int a, int b)  

{  

    return (&b)[(a-b)>>31];  

}  

///其思想就是a,b的地址是在栈上连续分配的,而且数据类型一样。且b的地址高于a的地址

///如果(a-b)>>31那么右移31为就是其符号为,正为0,负为1,对于右移运算,有符号位的

///时,如果为负,则符号位补1。

//此题中,b的地址高于a的地址,若a>=b,那么(a-b)>>31为0,(&b)[0]实际上就是b,

//若a<b,则(a-b)>>31位为1000 0000 0000 0001,所以为-1。此时(&b)[-1]实际上就是a。

//所以能找出最小值。

  

// 测试代码   

int main(void)  

{

  int a = 111;  

  int b = 114;  

  printf("The smaller one of %d and %d is %d\n", a, b, Min(a, b));      

  return 0;  

}  

摘自:http://blog.csdn.net/kingskyleader/article/details/6693500

相关知识:

1.程序的内存分配:堆,栈,全局常量区,字符常量区,程序代码区

2.程序中数据的内存分配是按以上5个区分区存放的。

3.栈是向低地址扩展的数据结构,是一块连续的内存的区域,大小已知的,WINDOWS下,栈的大小是2M。

  堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,

  而链表的遍历方向是由低地址向高地址。

3.在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,

  在VC6.0++编译器中,函数参数是由右往左入栈的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值