日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言按位取反原理

發布時間:2025/3/15 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言按位取反原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正數取反是先將初始數值轉換成二進制數(6==》00000110),再對二進制數的每一位取反:即將0變為1、將1變為0。(00000110==》11111001),得到的是最終結果的補碼,要轉換為最終結果的原碼則需再次取補碼,就能得到計算結果;負數取反是先將初始數值轉換成二進制數(以-6為例,10000110),再取得二進制數的補碼,之后對補碼的每一位取反:即將0變為1、將1變為0。得到的是最終結果的補碼,要轉換為最終結果的原碼則需再次取補碼,就能得到計算結果。

補碼:正數的補碼等于它的原碼;負數的補碼等于反碼+1

# include <stdio.h> int main() { unsigned char a=18,b;b=~a;printf(“~a=%d”,b); return 0; }

運行結果為: ~a= 237

#include <stdio.h> int main() { char a=18,b; b=~a;printf(“~a=%d”,b); return 0; }

運行結果:-19

注意:

前一個程序結果很好理解,后一個因為a是帶符號數據,因此~a=(11101101)2的結果是一負數的補碼,轉換為原碼時,第1位符號位不變,對剩余的部分先減1,再全部取反,因此得到的二進制原碼為:10010011,即十進制的-19。

在計算機中操作的是補碼
對6取反(~6)
6的原碼 0000 0000 0000 0000 0000 0000 0000 0110
6的反碼 0000 0000 0000 0000 0000 0000 0000 0110
6的補碼 0000 0000 0000 0000 0000 0000 0000 0110
計算機只能對補碼操作,那么對6取反(~6),實際操作的是補碼,每位取反
6的補碼全部取反 1111 1111 1111 1111 1111 1111 1111 1001 (得到的這個數是最高為代表負數)
補碼–>反碼 -1 1111 1111 1111 1111 1111 1111 1111 1000
反碼–>原碼 取反 1000 0000 0000 0000 0000 0000 0000 0111
故~6=-7

已知補碼如何求原碼(真值)~
正數的補碼反碼與原碼相同。

若已知補碼為 1111 1000,如何求其原碼呢?

(1)方法1:求負數 原碼--->補碼 的逆過程。

????????注意:符號位保持不變!

????(A)先 - 1,得到 1111 0111

????(B)取反(符號位保持不變,其他位置按位取反?),得到?1000 1000

(2)方法2:

????????注意:符號位保持不變!

????(A)將這個二進制數中(即 1111 1000),除了符號位,其余位置按位取反,得 1000 0111

????(B)+ 1,得到 1000 1000

總結:
????????-1 后,再取反???和 取反后,再+1??的效果是一樣的。

???????這就和??-(3-1)??和 (-3 +1)?是一個道理。
?

?

?

?

?

總結

以上是生活随笔為你收集整理的C语言按位取反原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。