CH2-2 类型转换 递增递减

 
2.7  类型转换
(1) 当运算符两端的操作数类型不一致时,一般的,"narrower"转向"wider"
(2) 字符转换函数
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char** argv) {
         int intResult = atoi( "123");         //convert s to int
         long longResult    = atol( "123456789"); //convert s to long
         double doubleResult    = atof( "43.57"); //convert s to double
        printf( "%d %ld %lf\n", intResult, longResult, doubleResult);
         return 0;
}
(3) 在赋值时  i = c;
(4) 函数参数传递时,一般在函数原型定义中,char 用int, float用double
(5) 显式 强制类型转换 (type-name) expression
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char** argv) {
        srand(3);                 //set seed, 默认为1
         int r = rand();     //产生伪随机数
        printf( "%ld %d\n",RAND_MAX, r);
         return 0;
}
2.8 递增和递减运算符 ++ --
(1)可前可后
      x = n++   x = ++n  有区别,x的值不同
2.9  位运算符
#include <stdio.h>
#include <stdlib.h>
/*
按位与&, 当两者中都为1时,result中该位为1
按位或|,当两者中至少有一位为1时,result中对应位为1
按位异或^,当两者相异时,result中对应位为1 // 与1异或得相反
按位取反~ 单目运算符
<< 左移运算符    a<<2,相当于扩大4倍
>> 右移运算符    对无符号数,左边补0;对有符号数,一般补符号位
*/
int main( int argc, char** argv) {
         int a = 0542;
         int b = 0177;
        printf( "a & b = %o\n", a & b); // 按位与&,截取一部分位,其他mask掉为0

         int c = 05;
         int d = 02;
        printf( "c | d = %o\n", c | d); //按位或,把该位打开
         return 0;
}
2.10 赋值运算符和表达式
(1) + - * / % << >> & ^ |
int bitcount(unsigned x){
     int b;
     for(b = 0; x != 0; x >>= 1)
             if(x & 01)
                     b++;

     return b;
}
2.11 条件表达式 ? :
for(i = 0; i < n; i++)
    printf( "%6d%c", a[i], (i%10==9 || i ==n-1)? '\n':' ');

printf( "you have %d item%s.\n", n, n==1 ? "" : "s");
 
2.12 运算符优先级

你可能感兴趣的:(职场,休闲)