進製運算與位運算

2021-06-21 14:52:07 字數 2962 閱讀 9701

不可以在二進位制表示形式中使用負號

5     0000 0101 

-5  1111 1011  取反加一

既是補碼

負數二進位制的計算方法是把整數二進位制按位求反 再加一 就是補碼

每個有符號資料型別中首位為 1 其它位都是 0 的二進位制表示這個資料型別的最小數

採用剛才的計算方法同樣可以根據負數的二進位制補碼計算出相反數的二進位制補碼

任何有符號的二進位制數字最左邊的數字叫符號位,可以根據它得到數字的正負情況

符號位是 1 表示負數是 0 表示正數

無符號數字沒有符號位不能直接把符號位替換成正負號正數

|負 數|

二進位制|

|------------|------------

|十進位制||

|程式中對資料的所有處理工作最終都會轉換成對二進位制數字的操作

整數型別之間互相賦值時會保持二進位制不變

char ch = 300  printf("%hhd",ch)  結果是 44  

整數佔四個位元組,字元佔乙個位元組

0000 0000

0000 0000

0000 0001

0010 1011     char 只有最後一行  

有符號整數型別資料擴充套件時會在前面填充數字的符號位

0000 0000

0000 0000

0000 0000

(1)000 1000    第乙個 1 被當作符號

, 是乙個操作符 可以把多個表示式連線在一起成為乙個表示式

表示式的計算結果是其中最後乙個表示式的計算結果

, 操作符的優先順序非常低

賦值操作符  =  編寫語句也是乙個表示式

賦值語句的結果就是賦值的數值

一條語句中如果有多個賦值操作符則先執行右邊的然後執行左邊的

只需要乙個數字配合就可以使用的從操作符叫單目操作符

需要兩個數字配合才能使用的操作符叫雙目操作符

需要三個數字配合使用的操作符叫三目操作符

大多數雙目操作符都可以和賦值操作符合併形成復合賦值操作符  例: *=  /= 等

復合賦值操作符可以對變數中的數字進行處理並把處理結果直接記錄在原有變數中

復合賦值操作符都是雙目操作符

復合賦值操作符也要求左邊是左值(變數) 右邊是乙個能當數字使用的東西

復合賦值操作符的優先順序和賦值操作符的優先順序一樣

int num = 15;

num *= 2 + 3;   則 num 結果是 75 

自增操作符 ++ 和自減操作符 -- 可以對變數中的數字做加一或減一操作

這兩個操作符都需要和乙個變數配合使用

這兩個操作符都有前操作和後操作之分

前操作優先順序非常高,後操作的優先順序非常低

不要在同一條語句中對同乙個變數多次做自增自減計算

布林型別包含真(true)和假(false)兩個數值

為了使用布林型別需要包含 stdbool.h 檔案

在計算機裡真用 1 表示 假用 0 表示

c 語言中所有整數都可以當布林數值使用,整數 0 當做布林值使用時表示假,其他整數當做布林值使用時表示真。

邏輯表示式的計算結果只能是真或者假 

邏輯操作符用來編寫邏輯表示式

雙目邏輯操作符包括 == ,!= ,> , >= , < , <=   

! 是乙個單目邏輯操作符,表示對乙個布林值求反

算術操作符的優先順序比邏輯操作符的優先順序高

&& (與)和 || (或)這兩個邏輯操作符可以用來編寫複雜邏輯表示式

使用 && 合併的兩個簡單邏輯表示式都為真的時候複雜邏輯表示式的結果是真

使用 || 合併的兩個簡單邏輯表示式其中有乙個為真則複雜邏輯表示式的結果是真

&& 和 || 都具有短路特徵

如果可以根據前邊的簡單表示式就可以判斷出整個複雜表示式的結果則後面的簡單表示式就不計算了

0 && ++num   已判斷 0 是假 ,則後面的 ++num 不會執行

位操作符直接對二進位制數字進行操作

雙目位操作符包括按位與 & 按位或 | 按位異或 ^ 

雙目位操作符都首先把參與計算數字的二進位制形式寫出來然後把對應數字上的數字進行計算

按位與計算時對應數字上只要有乙個 0 則這個數字的計算結果就是 0

3  &  5

0000 0011

0000 0101

--------------

0000 0001

按位與可以把某個二進位制數字清零

任何數字和 0 做按位與則結果是 0

任何數字和 1 做按位與則結果不變

按位或計算中對應數字上只要有乙個 1 則結果是 1

3  |  5

0000 0011

0000 0101

---------------

0000 0111

按位或可以把某個數字置 1 

任何數字和 0 做按位或結果不變

任何數字和 1 做按位或結果是 1 

按位異或計算過程中對應數字上的內容如果一樣則結果是 0 否則結果是 1

3  ^  5

0000 0011

0000 0101             相同為 0 不同為 1

----------------

0000 0110

按位異或可以把某個數字求反

任何數字和 0 做按位異或結果不變

任何數字和 1 做按位異或結果改變

練習

1.編寫邏輯表示式判斷使用者給定的年份是否是閏年

能被 4 整除不能被 100 整除 能被四百整除

2. 使用乙個char 型別變數控制紅綠燈 變數中最右邊的三個二進位制數字

紅  黃  綠 

1    1   1      表示亮

編寫語句在不知道變數內容的情況下點亮紅燈,

已知綠燈亮,編寫語句熄滅綠燈點亮黃燈

進製與位運算

1 理解個x進製的概念 每一位 只允許出現 0 x 1 這幾個數字,逢x進一,基是x,每一位有乙個權值大小是x的冪次。其表示的數值可以寫成按位權展開的多項式之和。十進位制 每一位只允許出現0 9這十個數字,逢十進1,基是十,每一位數字有乙個 權值大小是十的冪次。其表示的數值可以寫成按位權展開的多項式...

php 位運算與許可權,PHP中的位運算和進製處理

php中的位運算和進製是比較冷門的知識,感覺很簡單也很好理解,但是在實際場景中卻很少使用,本篇博文就是簡單了解基本概念以及講解如何去實際使用.位運算php中的位運算子是對整形進行的操作,比如對於十進位制,二進位制,八進位制等數字的一些操作.按位與 and 按位或 or 按位取反 not 按位異或 x...

位運算與移位運算

位運算指的是進行二進位制位的運算 位運算子說明 取反 按位與 按位或 按位異或 左移運算子,左移一位等於乘二 右移運算子,右移一位相當於除2取商 按位取反 按位與 按位或 按位異或的 執行操作 int a 7 0111 int b 8 1000 system.out.println a b 按位與結...