遗忘在时光之中的读书笔记
类型
- 值域与系统为特定类型的值分配的内存量有关,它通常依赖于所运行的计算机,叫做设备或机器相关量。
-
表达式的两个运算数是整型,该运算就将在整数运算的规则下进行。
150/100的 结果是1,即使是将结果赋给float变量。 -
对于任何处理两个值得运算,如果其中一个值是浮点变量或者常量,那么这一运算将作为浮点运算来处理。
150/100.0结果是1.5
-
类型转换运算符比其他所有算数运算符的优先级都高。
-
方法的数值参数会自动转换以匹配期望的类型,但在调用方法时提供正确的参数类型仍然是好的程序设计习惯。
表达式
-
一元负号运算符比其它算数运算符有更高的优先级。
C = -a * b;
将执行-a 乘以b -
定义的模运算符%只用于处理整数,它的优先级和乘法、除法的优先级相等。
-
关系运算符的优先级比所有的算数运算符都低。
-
和算数运算符和关系运算符相比,&&运算符的优先级更低,但是&& 比|| 运算符优先级高
!的优先级和一元运算符相同,和二元运算符和关系运算符相比,!的优先级更高
赋值运算符
Objective-C允许算数运算符和赋值运算符进行组合。
特点:
使程序语句更容易书写,
结果表达式通常容易阅读,
编译器在计算表达式时能产生更少的代码。
除逗号运算符以外的所有运算符都比赋值运算符的优先级高,而所有的赋值运算符的优先级相同。
a /= b+c 等同于 a = a / (b + c)
结构
条件判断中,else子句与最近的无else的if语句相对应。
if(a)
if(b) something;
else
someth;
实际上是
if(a){
if(b){
something;
}else {
something;
}
}
三元运算符的一种写法
result = flag ? : value;
flag为真则result等于flag,否则result等于value
for循环的变体
for (i = 0, j = 0; i < 10; i++){}
for (i = 0, j = 100; i < 10; i++, j -= 10){}
for (; j != 100; j++){}
两个非负整数的最大公约数
while(v != 0){
temp = u % v;
u = v;
v = temp;
}
最大公约数为u
颠倒显示一串数字
do {
right = number % 10;
NSLog(@"%d",right);
number /= 10;
}while(number != 10);
NaN 和 +inf
nan: not a number 不是数字
inf: infinity 无穷
nan一般是因为对浮点数进行了未定义的操作,如对-1开方
inf一般是因为得到的数值,超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);
浮点数类型除以0 产生 +inf ,对这个值@{@“key”😡(+inf)} 进行json处理也会导致崩溃。
变量 /变量(0)会崩溃 crash: Thread 1: EXC_ARITHMETIC (code=EXC_I386_DIV, subcode=0x0)
变量 /变量(0.0)不崩溃,会产生随机数。
NaN或者+inf并不会直接导致崩溃,但是在后期运算中可能导致崩溃
判断方法
if (isnan(a)) {
NSLog(@"NaN");
}
if (isinf(b)) {
NSLog(@"+inf");
}