
105
练习4.2可以接受,效率高,但程序员需要谨慎编写
练习4.4((12/3)*4)+(5*15)+((24%4)/2) 结果是91
练习4.5i%2 i为偶数结果为0,为奇数结果非0
练习4.7当计算的结果超出该类型所能表示的范围时就会产生溢出
unsigned i=0;--i;
short j=65536;++j;
int k=4294967296;++k;
逻辑与运算符和逻辑或运算符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。这种策略称为 短路求值。相等性运算符未定义求值顺序。
练习4.9cp是一个指向非空字符串的指针,为真,*cp是字符H,为真。故最终结果也为真。
练习4.10int i=0; while (cin>>i && i!=42)练习4.11
a>b && b>c && c>d练习4.12
首先得到 j < k 的结果为 true 或 false,转换为整数值是 1 和 0,然后判断 i 等于 1 还是 0 ,返回 bool 值。
练习4.13不能把一个指针赋给double变量,改为
dval=ival=0;pi=0;
前置递增运算符:将运算对象加1,将改变后的对象作为左值返回
后置递增运算符:将运算对象加1,将对象原始值的副本作为右值返回
不但无法输出第一个元素,而且更糟糕的是如果序列中没有负值,程序可能试图解引用一个根本不存在的元素
练习4.19#include练习4.22#include using namespace std; int main() { vector ivec{ 0,1,2,3,4,5,6,7,8,9 }; for (int i : ivec) { cout << ((i % 2) ? 2 * i : i) << " "; } return 0; }
#include#include #include using namespace std; int main() { int grade = 0; string finalgrade, finalgrade2; cin >> grade; //version 1 if (grade > 90) finalgrade = "high pass"; else if (grade > 75) finalgrade = "pass"; else if (grade > 60) finalgrade = "low pass"; else finalgrade = "fail"; //version 2 finalgrade2 = (grade > 90) ? "high pass" : (grade > 75) ? "pass" : (grade > 60) ? "low pass" : "fail"; cout << "version 1:" << finalgrade << endl << "version 2:" << finalgrade2; return 0; }
多个if语句的版本更容易理解,条件运算符多层嵌套会导致代码的可读性急剧下降
练习4.23加法运算符的优先级高于条件运算符,改为
string pl = s + (s[s.size() - 1] == 's' ? "" : "s") ;练习4.24
求值过程等同于
finalgrade = ((grade > 90) ? "high pass" : (grade < 60)) ? "fail" : "pass";练习4.25
11111111 11111111 11100011 10000000
练习4.26在某些机器上unsigned int可能没有32位
练习4.27#include练习4.29using namespace std; int main() { cout << "bool:tt" << sizeof(bool) << " bytes" << endl; cout << "char:tt" << sizeof(char) << " bytes" << endl; cout << "wchar_t:t" << sizeof(wchar_t) << " bytes" << endl; cout << "char16_t:t" << sizeof(char16_t) << " bytes" << endl; cout << "char32_t:t" << sizeof(char32_t) << " bytes" << endl; cout << "short:tt" << sizeof(short) << " bytes" << endl; cout << "int:tt" << sizeof(int) << " bytes" << endl; cout << "long:tt" << sizeof(long) << " bytes" << endl; cout << "long long:t" << sizeof(long long) << " bytes" << endl; cout << "float:tt" << sizeof(float) << " bytes" << endl; cout << "double:tt" << sizeof(double) << " bytes" << endl; cout << "long double:t" << sizeof(long double) << " bytes" << endl; return 0; }
第一个输出结果为10,第二个输出结果为1
练习4.30无需改动
练习4.32这个循环在遍历数组 ia,指针 ptr 和 整型 ix 都是起到一个循环计数的功能
练习4.33如果someValue为真,则x递增y递增,然后y递减
如果送么Value为假,则x递减,y递减
i*=static_cast
计算j/i,将其值强制转换为double型,再赋给slope