zoukankan      html  css  js  c++  java
  • python算数、逻辑运算,位运算

    • 算术运算符

    对变量和数组进行算术运算。

    算术运算符:+-*/%

    +:将连个或者多个数值相加

    -:将两个数值相减

    *:将两个数值相乘

    /:将两个数值相除

    %:取相除的余数

    • 赋值运算符

    将右边的值(计算结果)赋值给左边的变量

    赋值运算符:=+=-=*=/=%=.=

    =:赋值,将右边的值赋值给左边的变量

    +=:将左边的变量的值加上右边的结果之后,再将值赋值给左边的变量

    -=*=/=%=.=都是一样的效果

    注意!!!“.”十分特殊,表示一种字符串连接运算

    抑制错误,不让错误出现

    错误抑制符:@

    三元运算符

    参与运算的表达式有三个

    语法:表达式1 ? 表达式2 : 表达式3

    如果表达式1为真,那么计算表达式2,否则计算表达式3

    <?php
    $wenheichouwa = "ishere";
    $res = ($wenheichouwa=="ishere")?"喜欢小烤肠和小松鼠":"喜欢昌仔";
    echo $res."<br/>";
    $duwa = &$wenheichouwa;
    $duwa = "nothere";
    echo $res."<br/>";
    echo $wenheichouwa."<br/>";
    echo $duwa."<br/>";
    $res = ($wenheichouwa=="ishere")?"喜欢小烤肠和小松鼠":"喜欢昌仔";
    echo $res."<br/>";
    ?>
    • 自操作运算符

    自己操作自己的运算符

    自操作运算符:++--

    ++:分为前置++和后置++$a = $a + 1

    前置++++$a

    后置++$a++

    通常,在循环中,使用自运算比较,用户控制循环变量。

    • 字符串运算符

    连接字符串

    字符串运算符:..=

    $a = ‘hello ’;

    $b = ‘world’;

    .:表示两个字符串连接,不会改变原来的变量本身

    $c = $a . $b;

    .=:将两个字符串连接起来后再赋值给左边的变量

    $a .= $b <===========> $a = $a . $b;

    • 位运算符

    针对系统硬盘上存储的位进行操作(实际操作是以字节为单位),位运算在计算过程中,每个位的操作返回的结果都是1或者0

    位运算符:&|~^>><<

    &:按位与,表示两个位都为1时,则返回1,否则返回0

    |:按位或,表示两个有一个为1的时候,返回1,否则返回0

    ~:按位非,如果本身为0,则返回1,如果本身为1,则返回0

    ^:按位异或,如果两位不相同时,则返回1,如果两位相同则返回0

    >>:按位右移,将整个字节向右移一位,左边空出来的使用0补充

    <<:按位左移,将整个字节向左移一位,右边空出来的使用0补充

    右移运算乃是原来的结果右移几位就除以几个2,然后向下取整,左移运算是原来的结果左移几位就乘以几个2;

    <?php
    $mynum=5;
    echo "mynum左移5位的最终结果是".($mynum<<6)."<br/>";
    $hisnum=6;
    echo "hisnum右移2位的结果是".($hisnum>>2)."<br/>";
    ?>

    • 原码,反码,补码

     原码----一个数的二进制形式

    反码----一个数二进制按位取反

    补码----一个数二进制按位取反并加1,一个正数的原码,反码,补码都相同

    存储的实际情况----正数以原码的形式存储,负数以补码的形式存储。

    以整数1为例,我们知道php的整型数占4个字节,每个字节占8位,正数的原码,反码,补码又都相同,正数的最高位是0,所以对于1有
    
    #原码 00000000 00000000 00000000 00000001
    #反码 00000000 00000000 00000000 00000001
    #补码 00000000 00000000 00000000 00000001
    负数反码。补码的错误操作形式

    而对于-1来说,按照既定原则,最高位应该为1,所以他的原码形式为 #原码 10000000 00000000 00000000 00000001 反码就是各位取反 #反码 01111111 11111111 11111111 11111110 补码就是反码各位再加1
    01111111 11111111 11111111 11111110
    +
    00000000 00000000 00000000 00000001
    =
    01111111 11111111 11111111 11111111
    但是问题显然出现了,最终结果 01111111 11111111 11111111 11111111 明显是个正数!

    所以对于负数来说,他的反码形式是 最高位不动,其余的位取反
    
    
    正确姿势,负数的反码最高位不变,其他位取反
    
    -1的反码
    
    #反码11111111 11111111 11111111 11111110
    
    补码 = 反码+1
    
    11111111 11111111 11111111 11111110
    +
    00000000 00000000 00000000 00000001
    =
    补码为 11111111 11111111 11111111 11111111

    php提供了几常见进制之间转换的函数

    二进制转为其他进制

    binoct();//转为八进制

    bindec();//转为十进制

    binhex();//转为十六进制

    八进制转为其他进制

    octbin();//转为二进制

    octdec();//转为十进制

    octhex();//转为十六进制

    十进制转为其他进制

    decbin();//转为二进制

    decoct();//转为八进制

    dechex();转为十六进制

    十六进制转为其他进制

    hexbin();转为二进制

    hexoct();//转为八进制

    hexdec();//转为十六进制

  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/9908803.html
Copyright © 2011-2022 走看看