• C 和 C++ 一些基础


    位运算:

    Part1:

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        //unsigned char per byte that contain 00000000 - 11111111
        unsigned char a=2;  // bin->0000 0010
        unsigned char b = ~a; //~(0000 0010) result:(1111 1101) or 253
        printf("%d
    ",b);
    
        unsigned char c=3; //0000 0011
        unsigned char d=2; //0000 0010
        printf(" & %d
    ",c&d); // c&d -> 0000 0010 : 2
    
        printf(" | %d
    ",c|d); // c|d -> 0000 0011 : 3
    
        
        //十六进制->十进制 hexadecimal(hex)->base10
        int d_hex = 0xA3F;
        //A-..-F (10-15)
        //0xA3F -> A3F -> 10*16^2 + 3*16^1 + 15*16^0 = 2623
        printf("0xA3F : %d
    ",d_hex); // 2623
    
        int d_hex_zero = 0x000; //0*16^2 + 0*16^1 + 0*16^0 = 0
        printf("0x000 : %d
    ",d_hex_zero);
    
        int d_hex_1 = 0x001; //0*16^2 + 0*16^1 + 1*16^0 = 1
        printf("0x001 : %d
    ",d_hex_1);
    
        int d_hex_2 = 0x011; //0*16^2 + 1*16^1 + 1*16^0 = 17
        printf("0x001 : %d
    ",d_hex_2);
        
        return 1;
    }
    View Code

    Part2:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        // int is 32 bit
        int a = 10; //00000000 00000000 00000000 00001010  0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 10
        int b = 5;  //00000000 00000000 00000000 00000101  1*2^0 + 0*2^1 + 1*2^2 + 0*2^3 = 5
        int c = a | b ; // 00000000 00000000 00000000 00001111 1+2+4+8 = 15
        cout << c <<endl;
        int d = c|0xFF;  //hex: 0xFF = 15*16^1 + 15*16^0 = 255  bin:255-> 1111 1111
        cout << d <<endl;
    
    
        // ^
        int e = a ^ b; //00000000 00000000 00000000 00001111 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 15
        cout << e <<endl;
    
        // swap a b
        // a 00000000 00000000 00000000 00001010
        // b 00000000 00000000 00000000 00000101
    
        a = a ^ b ; // a->00000000 00000000 00000000 00001111
        b = b ^ a ; // b->00000000 00000000 00000000 00001010
        a = a ^ b ; // 00000000 00000000 00000000 00000101
    
        cout << "after swap a,b  a:" << a << "	" << "b:"<<b <<endl;
        return 0;
    }
    View Code

    C语言的几个输入输出函数

    #include <stdio.h>

    getchar(),putchar()

    scanf(),printf()

    1->getchar()与scanf()唯一的区别是getchar()不会跳过' '或者空格,例如如下

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int ch;
        int a,b;
        printf("enter a char ,enter to quit
    ");
        while((ch=getchar()) != '
    ' )
        {
            if (scanf("%d %d",&a,&b)!=2)
                break;
            printf("you enter the %c %d %d
    ",ch,a,b);
            // getchar();//the ch a b enter complete will leave a '
    '
            while(getchar() != '
    ') // GNU BOOK always use this
            {
                continue;
            }
            printf("PLEASE ENTER ANOTHER CHAR 
    ");
        }
    
        exit(0);
    }

    如果没有while循环中的while(getchar() != ' ') ,那么程序输入一轮直接结束,原因是scanf()会把回车 放到输入队列。所以要剔除输入的回车

    2->如何确定输入类型

    scanf()返回值是其成功读入的项目个数。比如scanf("%d %d",&a,&b)==2

     如下面代码,如果输入q,则state=0

    int main()
    {
        int input;
        int state = scanf("%d",&input);
        printf("state = %d,and input value is %d,",state,input);
        exit(0);
    }

    输入输出大集合:

     char temp[81];
        printf("Please enter your first name
    ");
        // STDIN
        //scanf("%s",temp); // jump backspace
        //fscanf(stdin,"%s",temp); // jump backspace
        fgets(temp,81,stdin); // do not jump backspace
        //gets(temp);  // do not jump backspace
    
        // STDOUT
        //printf("You enter the strings -> : %s
    ",temp);
        //fprintf(stdout,"You enter the strings -> : %s
    " ,temp);
        //fputs(temp,stdout);
        puts(temp);
    
        // CHAR putchar() getchar()
    
        //getc(FILE*) putc(char,FILE*)
        FILE *in;
        FILE *out;
        in = fopen("test.txt","r");
        if(in==NULL){return;}
        out = fopen("test.txt","w");
        if(out==NULL){ return;}
        int ch;
        while((ch=getc(in))!=EOF) // COPY DATA PER CHAR
        {
            putc(ch,out);
        }

    宏定义:

    #include <stdio.h>
    #define PSQR(x) printf("Value squre of "#x" is %d 
    ",(x*x));
    #define XNAME(n) x##n
    
    #define SIZE "HOUDINI"
    
    #ifdef SIZE // if define the SIZE
        #define SIZE "MAYA"
    #endif
    
    #ifdef __GNUC__  //if define the __GUNC__
        #define HOUDINI 2
    #else
        #define HOUDINI 3
    #endif
    
    #ifndef __SIZEOFINT__  // becuase __SIZEOFINT__ do not define,that "if not define the __SIZEOFINT__"
        #define __SIZEOFINT__ sizeof(int)  // so can arrive this code
    #endif
    
    
    #define NOFLOAT 1
    
    #if NOFLOAT == 1 //check NOFLOAT equal 1,then #include<float.h>
    #include <float.h>
    #elif NOFLOAT == 2
    #include <typeinfo.h>
    #elif NOFLOAT == 3
    #include <typeinfo.h>
    #else
    #include <stdarg.h>
    #endif
    
    #if defined(NOFLOAT)  // if define NOFLOAT  ------ same as #ifdef NOFLOAT
        #define A 2
    #endif
    
    int main(int argc, char *argv[])
    {
        printf("Hello World!
    ");
        PSQR(2*4);
    
        char name[20];
        fprintf(stdout,"enter the name
    ");
        fgets(name,20,stdin);
    
        int i=0;
    
        return 0;
    }
    View Code

    定义一个简单的宏:

    #define GARRSERT(EXP) 
    {
        if(EXP != 1)
    {
        printf("Assert expression "#EXP " ERROR %s IN %d line 
    ",__FILE__,__LINE__);
        exit(0);
    }
    }

    GARRSERT(3>5);

    strycpy strlen

    #include <stdio.h>
    #include <stddef.h>
    void gstrcpy(char *dst,char const *str);
    void gstrcpy2(char *dst, char const *str);
    size_t gstrlen(char *str);
    int main()
    {
        char *src = "houdini";
        char dst[8]={''};
        gstrcpy(dst,src);
        printf("get final str %s 
    " , dst);
        return 0;
    }
    
    void gstrcpy(char *dst, char const *str)
    {
        while( 1 )
        {
             *dst++ = *str++;
            if(*dst != '')
                break;
        }
    }
    void gstrcpy2(char *dst, char const *str)
    {
        while((*dst++ = *str++) !='');
    }
    size_t gstrlen(char *str)
    {
        int length;
        for(length=0;*str++ != '';length+=1);
        return length;
    }
    View Code

    3,C++ 标准输入cin, getline(),cin.get() ;

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    #define FLUSH_BUFFER()
    while(cin.get()!='
    ') 
    {
    continue;
    }
    
    
    int main()
    {
        
        char info[100];
    
        cout << "
    **use cin>>info
    ";
        cin >> info;   // read a word,and leave other to the buffer ,include '
    ',but no whitespace
        cout << "==use cin>>info: " <<info << "  It's Length: " <<strlen(info)<<endl;
    
        FLUSH_BUFFER();
    
    
        cout << "
    **cin.getline(info,100)
    ";
        cin.getline(info,100); // read a line,discard '
    '
        cout << "==use cin.getline(info,100):" << info <<endl;
    
        cout << "
    **cin.get(info,100)
    ";
        cin.get(info, 100); // read a line ,but leave the '
    ' to buffer
        cout << "==use cin.get(info,100): " << info << std::endl;
    
    
        FLUSH_BUFFER();
    
    
        cout<< "
    **next use the String
    ";
        string stuff;
        cin>>stuff; //read a word ,leave 
    ,but no whitespace
        cout << "==use cin>>stuff: " << stuff << std::endl;
    
        FLUSH_BUFFER();
    
        cout<< "
    **next use the getline(cin.stuff)
    ";
        getline(cin,stuff);   // read a line,discard '
    '
        cout << "==use getline(cin,stuff) " << stuff << std::endl;
        
        char fname[10];
        string lname;
        cin >> fname; // if input size > 9 , could be a problem
        cin >> lname; // can read long  long word
        
        // C++ Style :
        operator>>(cin,fname);
            
        
    
        return 0;
    }
    View Code

    4,

    (1)字符串分析,函数指针)

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <vector>
    #include <omp.h>
    #include <sstream>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    namespace PARSE_STRING 
    {
    
    
        inline int start_with(string &input,string startwith)
        {
            if(startwith.size()>input.size())
            {
                return 0;
            }
        
            int state = 0;
            for(int i=0;i<startwith.size();i++)
            {
                if(input[i]!=startwith[i])
                {
                    state = -1;
                }
            }
            if(state==0)
            {
                return 1;
            }
        }
    
        inline string int_to_str(int value)
        {
            char str[10];
            sprintf(str,"%d",value);
            string final(str);
            return final;
        }
        
        inline string str_to_pad(string str,int pad)
        {
            string prefix="0000000";
            string cnt_str = prefix + str;
            string final = cnt_str.substr(cnt_str.size()-pad,cnt_str.size());
            return final;
        }
    }
    namespace GLY_FUNCTION_POINTER
    {    
        void test()
        {
            cout << "test with no arguments
    ";
        }
        void test2(int a)
        {
            cout << "test with one arguments "<< a <<"
    ";
        }
        void* test3()
        {
            cout << "test with no argumetens and return pointer"<<"
    ";
            int a =10;
            return (void*)&a;
        }
        void *test4(int b)
        {
            cout <<"test with one arguments and return pointer" << "
    ";
            return (void*)&b;
        }
        
        
        void test_pointer_func()
        {
            typedef void (*pf)();
            pf _func_01 = test;
            _func_01();
        
            typedef void (*pf_one)(int);
            pf_one _func_02 = test2;
            _func_02(2);
        
            typedef void * (*pf_sce)();
            pf_sce _func_03 = test3;
            cout << *((int*)_func_03()) << endl;
        
            typedef void * (*pf_sce_one)(int);
            pf_sce_one _func_04 = test4;
            cout <<  *((int*)_func_04(5)) <<endl;
        }
    
    }
    
    
    void heap_test()
    {
        int ia[9]={0,1,2,3,4,8,9,3,5};
        vector<int> ivec(ia,ia+9);
        for(int i=0;i<ivec.size();i++)
        {
            cout << "i :" << i << " -> value:" << ivec[i] << endl;
        }
        make_heap(ivec.begin(),ivec.end());
        cout << "----
    ";
        for(int i=0;i<ivec.size();i++)
        {
            cout << "i :" << i << " -> value:" << ivec[i] << endl;
        }
        cout << "----
    ";
        pop_heap(ivec.begin(),ivec.end());
        for(int i=0;i<ivec.size();i++)
        {
            cout << "i :" << i << " -> value:" << ivec[i] << endl;
        }
    }
    
    void convert_data()
    {
    
        int a = 10;
        void *data = (void*)&a;
        int b = *(int *)data;
        cout << b <<endl;
    
    }
    
    void reverse_the_container()
    {
        vector <int> aaa;
        aaa.push_back(1);
        aaa.push_back(2);
        aaa.push_back(3);
    
        //std::reverse(aaa.begin(),aaa.end());  // this is use the algorithm.h ,aaa will changed
        //cout << aaa[0] <<endl;
    
        for(vector<int>::const_reverse_iterator iter=aaa.rbegin();iter!=aaa.rend();++iter)  // aaa do not change
            cout<<*iter<<endl;
    
    
    }
    void transfer_data(void *data,int length)
    {
    
        for(int i=0;i<length;i++)
        {
            cout << ((int*)data)[i] << endl;
        }
    }
    
    
    
    struct myarray
    {
        vector <int> data;
    };
    
    void transfer_struct(void *data)
    {
        cout<<"transfer_struct "<<data<<endl;
        myarray rh_array = *(myarray*)data;
        for(int i=0;i<rh_array.data.size();i++)
        {
            cout<< rh_array.data[i] << endl;
        }
    }
    
    template <typename T>
    struct gly_array
    {
        vector <T> data_array;
    };
    
    template <typename T>
    void transfer_struct_template(gly_array<T> rh_array)
    {
        for(int i=0;i<rh_array.data_array.size();i++)
        {
            cout<< rh_array.data_array[i] << endl;
        }
    }
    
    
    
    int main()
    {
      myarray _array;
      _array.data.push_back(10);
      _array.data.push_back(11);
      cout<< "main "<<&_array<<endl;
      transfer_struct((void*)&_array);
    
      cout<< "template ";
      gly_array<int> int_array;
      int_array.data_array.push_back(10);
      int_array.data_array.push_back(11);
      int_array.data_array.push_back(12);
      cout << &int_array<<endl;
      transfer_struct_template(int_array);
    
    }
    View Code

    (2)point 

    namespace test_struct_define 
    {
        struct Point3d
        {
            float x;
            float y;
            float z;
        };
    
        #define XSET(P,xval,yval,zval)
        {
            P.x=xval;
            P.y=yval;
            P.z=zval;
        }
    
        inline ostream& operator <<(ostream &os,const Point3d &pt)
        {
            os << "X:VALUE->"<<pt.x << " Y:VALUE->"<< pt.y << " Z:VALUE->" <<pt.z<<endl;
            return os;
        }
    
        int main()
        {
            Point3d pt;
            XSET(pt,1,2,3);
            cout<< pt <<endl;
        }
    
    
    }
    
    template <typename T>
    class GLY_POINT_3d
    {
    public:
        GLY_POINT_3d(T x=0.0,T y=0.0,T z=0.0):_x(x),_y(y),_z(z)
        {
        }
    
        T x() const
        {
            return _x;
        }
        T y() const
        {
            return _y;
        }
        T z() const
        {
            return _z;
        }
    
        friend ostream&operator<<(ostream &os,const GLY_POINT_3d <T> &pt)
        {
            os<< pt.x()<< " "<< pt.y()<<" " << pt.z();
            return os;
        }
    
    
        T &operator [](int index)
        {
            assert(index<3);
            if(index==0)
            {
                return _x;
            }
            if(index==1)
            {
                return _y;
            }
            if(index==2)
            {
                return _z;
            }
        }
    private:
        T _x;
        T _y;
        T _z;
    };
    int main()
    {
        GLY_POINT_3d <int> pt(1,2,3);
        cout << pt<<endl;
        cout << pt[0] <<endl;
        cout << pt[1] <<endl;
        cout << pt[2] <<endl;
    
    
    }
    View Code
  • 相关阅读:
    分布式系统阅读笔记(六)-----间接通信
    分布式系统阅读笔记(六)-----间接通信
    分布式系统阅读笔记(六)-----间接通信
    分布式系统阅读笔记(七)-----操作系统的支持
    分布式系统阅读笔记(七)-----操作系统的支持
    分布式系统阅读笔记(七)-----操作系统的支持
    分布式系统阅读笔记(八)-----分布式对象和组件
    sizeof()
    void *
    strcpy函数的实现
  • 原文地址:https://www.cnblogs.com/gearslogy/p/5499980.html
Copyright © 2020-2023  润新知