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();//轉為十六進制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM