zoukankan      html  css  js  c++  java
  • chapter 15 运算符详解

    15.1位运算符

    1.位运算符都是要做Usual Arithmetic Conversion(其中有一步是Integer Promotion),所以在c语言中并不存在8为整数的位运算,操作数在进行运算前都至少被提升为int型了

    ex1:

    unsigned char c = 0xfc;
    unsigned int i = ~c;

    因为在~c前已经先将c转换为16位,所以为0x00fc.取反,如果理解为8位,则为0xfc取反,此时错误的结果为3.

    2.在一定的取值范围内,将一个整数左移1位相当于乘以2.此时一定的范围主要是指,左移不能改变最高位(符号位)

    3右移的规则

    • 如果是正数,最高位移入0
    • 如果为负数,最高位移入0or1(根据不同平台确定,Implementation-defined,gcc为1)

    tip:一般建议仅对无符号数进行操作,以减少出错的可能。

    4 异或的性质:不管0or1,与0异或保持原值不变,与1异或则取反

    利用此性质可以进行就校验:a1^a2^a3…..^an 如果结果为1,则其中的1的个数为奇数个,否则为偶数个

    5RAID(redundant array of independent disks)独立磁盘冗余阵列就是利用为操作的原理进行分割

    不用变量交换两数据

    1

    startAngle = startAngle+stopAngle;
    stopAngle = startAngle-stopAngle;
    startAngle = startAngle-stopAngle;

    缺点:无法用于小数

    2

    x ^= y;
    y ^= x;
    x ^= y;
    缺点:无法用于小数
    (不要用这种方法,最好的还是利用temp进行交换)
    5 sizeof 表达式  其中表达式并不求值。sizeof(i++),其中i不变
    6 side effect &sequence point 
    side effect:改变计算机存储的值或者输入输出
    sequence point:当执行到某一点时,之前的side effect必须作用完毕
    在写代码时要熬注意同一个变量在两个sequence point之间最多只允许改变一次
    ex2
    int a =0;
    a = a++;
    ex3
    a[i++]=i;
    虽然只改变一次也是不确定的
    C99 Between the previous and next sequence point an object shall have its stored value modified at most once by the
    evaluation of an expression.Furthermore,the prior value shall be read only to determine the value to be stored.
  • 相关阅读:
    winform 异步更新ui
    定时器的写法 winform
    延迟加载
    使用VS分析程序性能
    win7 C/C++,QT安装环境总结
    论文总结
    天舟一号
    硬盘 SMART 检测参数详解[转]
    碧桃花
    在C的头文件中定义的结构体,如何在cpp文件中引用
  • 原文地址:https://www.cnblogs.com/qtalker/p/2998701.html
Copyright © 2011-2022 走看看