zoukankan      html  css  js  c++  java
  • 获得第二大的元素

    #include<iostream>
    using namespace std;
    
    int main()
    {
     int s1 = 1;
     unsigned int s2 = 1;
    
     cout<<(s1<<31)<<endl; ///这是把i左移两位,左移的规则只记住一点:丢弃符号位,0补最低位!如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了332=1位。
     cout<<(s2<<31)<<endl;///左移的话,有符号与符号都是一致的 2147483648
    
     // 右移有两种,算术右移(带符号)>>和逻辑右移(不带符号)>>>。
     //算术右移:符号位不变,左边补上符号位。如: 1000 1000 >> 3 为 1111 0001
     //逻辑右移:符号位一起移动,左边补上0。如:1000 1000 >>> 3 为 0001 0001
    //
    // 在C语言标准中,只规定了无符号数的移位操作是采用逻辑移位(即左移、右移都是使用的逻辑左移和逻辑右移)。 
    //而对于有符号数,其左移操作还是逻辑左移,但右移操作是采用逻辑右移还是算术右移就取决于机器了!
    }
    #include<iostream>
    #include<algorithm>
    #include<numeric>
    using namespace std;
    
    bool helper(const int a[],const int n, int &max, int &min)
    {
       max = std::max(a[0],a[1]); ///引用可以改变引用对象吗,这是个值得疑问的问题
       min = std::min(a[0],a[1]);
       for(int i = 2;i< n - 1 ; i = i+2) ///小心,这里面以2为step,是陷阱呀
       {
        int tmax = std::max(a[i],a[i+1]);///用标准库函数的话,就不是1.5了,就当练习了
        int tmin = std::min(a[i],a[i+1]);
    
        max = std::max(max,tmax);
        min = std::min(min,tmin);
       }
    
       max = std::max(max,a[n-1]);
       min = std::min(min,a[n-1]);
       return true;
    }
    
    int main()
    {
        int a[] = {1,2,3,2,4,5,6,7,8,5,3};
        int max,min;
        helper(a,sizeof(a)/sizeof(a[0]),max,min);
        cout<<max<<" "<<min<<endl;
    
    }
    berkeleysong
  • 相关阅读:
    app测试和web测试的相同点和不同点
    重写 和 重载
    23种设计模式总概括
    小程序webview跳转页面后没有返回按钮完美解决方案
    服务器配置https协议,三种免费的方法
    Android通过外部浏览器调用微信H5支付,Android+PHP详解
    vue多级复杂列表展开/折叠,全选/分组全选实现
    A very good RPC debugging session
    在WinForms中使用ActiveX
    Lauch Debugger automatically when start the process
  • 原文地址:https://www.cnblogs.com/berkeleysong/p/3736384.html
Copyright © 2011-2022 走看看