1. 程式人生 > >ch5-使用表達式、 語句和運算符

ch5-使用表達式、 語句和運算符

意義 [] ace 有意義 enter 存儲 ear 爭論 bitset

#include <QCoreApplication>
#include <iostream>
#include <bitset>

using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

#if 0
    //1.
    cout << "Hello             World!" << endl;

    cout << "Hello "
            "World!" << endl;

    //2.
    //左值通常是內存單元,另外,右值可以是內存單元裏的內容
    uint daysInYear = 365;

    //3.
    cout << 20 / 3 << endl;
    cout << 20.0 / 3 << endl;
    cout << 20 % 3 << endl;
    //invalid operands of type ‘double‘ and ‘int‘ to binary ‘operator%‘
// cout << 20.0 % 3 << endl;

    //4.
    //遞增運算符和遞減運算符、前綴和後綴
    //首先需要理解前綴和後綴之間的差別,這樣才能選擇合適的方式。使用後綴運算符時,先將右值賦給左值,再將右值遞增或遞減
    //前綴運算符的行為完全相反,即先將右值遞增或遞減,再將結果賦給左值
    int startValue(100);

    int postfixIncrement = startValue++;
    cout << "postfixIncrement:" << postfixIncrement << ",startValue:" << startValue << endl;
    startValue = 100;
    int prefixIncrement = ++startValue;
    cout << "postfixIncrement:" << postfixIncrement << ",startValue:" << startValue << endl;

    //您經常會聽到前綴運算符的性能更高還是後綴運算符性能更高的爭論。換句話說,++startValue 優於 startValue++。
    //至少從理論上說確實如此,因為使用後綴運算符時,編譯器需要臨時存儲初始值,以防需要將其賦給其他變量。
    //就整型變量而言,這對性能的影響幾乎可以忽略不計,但對某 些類來說,這種爭論也許有意義。
    //聰明的編譯器可能通過優化消除這種差異。
    startValue++; //is the same as ...
    ++startValue;

    //5.
    //邏輯運算符:與或非
    int n1(10), n2(20);
    bool isLessEquals = n1 <= n2;
    cout << "isLessEquals:" << isLessEquals << endl;

    cout << "enter true(1) or false(0) for two operands:" << endl;
    bool op1 = false, op2 = false;
    cin >> op1 >> op2;

    cout << op1 << " AND " << op2 << " = " << (op1 && op2) << endl;
    cout << op1 << " AND " << op2 << " = " << (op1 || op2) << endl;
#endif

    //6.
    //按位運算符
#if 0
    cout << "input a number(0,255):" << endl;
    quint8 inputNum = 0;
    cin >> inputNum;

    bitset<8> inputBits = inputNum;
    cout << inputNum << " in binary is " << inputBits << endl;

    bitset<8> bitwiseNOT = ~inputBits;
    cout << "~ " << inputBits << " = " << bitwiseNOT << endl;

    bitset<8> bitwiseOther = 0x0F;
    bitset<8> bitwiseAND = inputNum & bitwiseOther.to_ulong();
    cout << inputBits << " AND " << bitwiseOther << " = " << bitwiseAND << endl;

    bitset<8> bitwiseOR = inputNum | bitwiseOther.to_ulong();
    cout << inputBits << " | " << bitwiseOther << " = " << bitwiseOR << endl;

    bitset<8> bitwiseXOR = inputNum ^ bitwiseOther.to_ulong();
    cout << inputBits << " | " << bitwiseOther << " = " << bitwiseXOR << endl;

    cout << "before inputnum:" << inputBits << endl;
    inputNum |= bitwiseOther.to_ulong();
    inputBits = inputNum;
    cout << "after inputnum:" << inputBits << endl;
#endif

    //7.
    //按位右移運算符,按位左移運算符
#if 0
    int number = 0;
    cout << "input a number:" << endl;
    cin >> number;

    int halfNum = number >> 1;
    cout << "half num:" << halfNum << endl;

    int quarterNum = number >> 2;
    cout << "quarter num:" << quarterNum << endl;

    int doubleNum = number << 1;
    cout << "double num:" << doubleNum << endl;

    int quadrupleNum = number << 2;
    cout << "quadruple number:" << quadrupleNum << endl;
#endif

    //8.
    //復合賦值運算符
// bool ba(false), bb(false);
// ba &&= bb;

    //9.
    //sizeof
    int intArr[100] = {0};
    cout << sizeof(intArr) << endl;
    cout << sizeof(int) << endl;
    cout << sizeof(intArr[0]) << endl;

    //務必使用括號讓代碼和表達式易於理解。
    //務必使用正確的變量類型,確保它不會溢出

    return a.exec();
}


來自為知筆記(Wiz)

ch5-使用表達式、 語句和運算符