zoukankan      html  css  js  c++  java
  • [C++]移位

    一、 看到一个计算n的绝对值的方法:n * ((n>>31<<1)+1),开始不是很理解,后来才发现是自己对于C++的移位操作符理解有误。

    查阅了些资料和自己动手实践了下,做了下面的总结:

    1、左移操作符(<<)在左边插入0一补充空位。

    2、右移操作符(>>),如果其操作数是无符号数,则左边开始插入0;如果操作数是有符号数,则插入符号位的副本或者0值。

    3、移位操作的右操作书不可以是负数,而且必须是严格小于左操作书位数的值。否则,操作的效果未定义。

    4、VS中实际进行的是m>>(n%32)移位,这就导致了m>>2等于m>>34

    5、VSm>>-1移动的位数为-1对应的机器码,即把-1当做无符号数对待,移位的位数为FFFFFFFFh

    二、在此顺便写下在汇编中的移位规则,供大家参考

        SHLSHR表示逻辑左移和逻辑右移,SARSAL表示算术左移和算术右移。其中逻辑左移和算术左移都是寄存器二进制整体向左移动,

    并在右边补0而右移则不同,逻辑右移是整体向右移,并在左边补0,而算术右移则是根据原符号的值补与其相同的值。


  • 相关阅读:
    ZOJ 2859 Matrix Searching
    URAL 1102. Strange Dialog
    ZOJ 1986 Bridging Signals
    POJ 3233 Matrix Power Series
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    ZOJ 3471 Most Powerful
    IIS:HTTP 错误 403.9 禁止访问:连接的用户过多
    使用Command对象执行数据库操作
    C#类型转换
  • 原文地址:https://www.cnblogs.com/dirt2/p/yi_wei.html
Copyright © 2011-2022 走看看