1樓:匿名使用者
i為int型別 通常佔4個位元組
0的原碼:0000 0000 0000 0000 0000 0000 0000 0000
取反: 1111 1111 1111 1111 1111 1111 1111 1111
最高位是1所以是負數,求其原始資料,方法是
再次取反加1(符號位不變)
取反: 1000 0000 0000 0000 0000 0000 0000 0000
加1 1000 0000 0000 0000 0000 0000 0000 0001
所以是 -1
2樓:匿名使用者
0x00 ~ 0x7fffffff=> 0 ~ 21474836470x80000000 => -21474836480x80000001 => -2147483648 + 1 = -2147483647
0x80000001 => -2147483648 + 2 = -2147483646
......
0xffffffff => -2147483648 + 2147483647 = -1
c語言求大神!!~按位取反,0取反為什麼是-1不是1? 10
3樓:一顆程式猿
按位取反是指按照"二進位制位"
0 的二進位制為 0000 0000 0000 0000取反以後得到 1111 1111 1111 1111這個是-1的補碼
4樓:匿名使用者
如果0代表32位int的話,取反後就是
11111111 11111111 11111111 11111111,
上邊的二進位制如果代表有符號整數的話是-1,無符號整數的話是2^32 - 1
c語言基礎題:d1=~a的意思不就是按位取反麼?不就是把0變1,1變0麼?為啥又負數補碼還原求原碼
5樓:匿名使用者
~a表示將a按位取反,a是一個變數 , 至少要有1個位元組(char),而一個位元組有8位!
計算機中儲存的整數,都是按補碼存放的,規定:正數的補碼與原碼相同,負數的補碼為其原碼的反碼+1。 所以,當a是負數時,計算~a的結果是要求補碼的。
如:char a=7 ; (00000111)~a = 11111000
轉換成原碼為:
反碼:11111000 - 1 = 11110111原碼:10001000= -8
c語言的位運算中,~0為什麼等於-1呢?怎麼不是1呢?
6樓:
按位取反,0就是 32個抄0bit(針對int型別), 取反後是bai32個1bit即16進位制的0xffff_ffff ,而-1==0xffff_ffff,所以du0取反就是-1。。。怎麼算出來zhi很簡單,dao 計算機中資料是補碼形式儲存, -1對應的補碼是1取反+1, 1取反==0xffff_fffe, 那麼再+1就是 0xffff_ffff。。。
7樓:匿名使用者
"~" 是指位元運算.
你要0 => 1, 1=> 0, 這叫做邏輯運算, 應該用 "!"
請再多查查書, 看清楚差異.
c語言中按位取反-1怎麼算
8樓:
c語言中-1的絕對值是1,二進位制00000001,取反為11111110,-1為11111111,取反是00000000。
1、所有正整數的按位取反是其本身+1的負數;
2、所有負整數的按位取反是其本身+1的絕對值;
3、零的按位取反是-1(0在數學界既不是正數也不是負數);
0的原碼:00000000000000000000000000000000
取反:11111111111111111111111111111111
最高位是1所以是負數,求其原始資料,方法是
再次取反加1(符號位不變)
取反:10000000000000000000000000000000
加110000000000000000000000000000001
所以是-1
擴充套件資料
c語言按位與運算子(&)
按位與運算將兩個運算分量的對應位按位遵照以下規則進行計算:
0&0=0,0&1=0,1&0=0,1&1=1。
即同為1的位,結果為1,否則結果為0。
例如,設3的內部表示為
5的內部表示為
則3&5的結果為
按位與運算有兩種典型用法,一是取一個位串資訊的某幾位,如以下**擷取x的最低7位:x&0177。二是讓某變數保留某幾位,其餘位置0,如以下**讓x只保留最低6位:
x=x&077。以上用法都先要設計好一個常數,該常數只有需要的位是1,不需要的位是0。用它與指定的位串資訊按位與。
9樓:匿名使用者
-1是這樣表示的:-1的絕對值是1,二進位制0000 0001,取反為1111 1110,加1等於1111 1111,所以-1為1111 1111,這個取反當然是0000 0000
10樓:匿名使用者
-1補碼二另進位制是111111111取反為00000000
-1轉二進位制的方法,1轉二進位制,取反加1,1的二進位制是0000001,取反11111110加1為11111111
11樓:皇家小快樂
負數的反碼符號不變 其他位按位取反
12樓:怕壯
-1 的 **是 1111 1111 啊, 不要搞錯了
c語言中按位取反 1怎麼算
c語言中 1的絕對值是1,二進位制00000001,取反為11111110,1為11111111,取反是00000000。1 所有正整數的按位取反是其本身 1的負數 2 所有負整數的按位取反是其本身 1的絕對值 3 零的按位取反是 1 0在數學界既不是正數也不是負數 0的原碼 00000000000...
c語言按位運算子是什麼意思啊二進
一 位運算子 語言提供了六種位運算子 按位與 按位或 按位異或 取反 左移 右移 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二...
C語言中位操作 3》31值為什麼是
右移操作時,連同符號位同時移動,且符號位是1 負數 時,補1,符號位是0 正數 時補0。char a 3 3 11111101 2事實上,右移2位後,該數為11111111,次數已經是 1了。 c語言中,假設你的機器字長一個位元組是32位,那麼你注意 3在計算機補碼中表示 1111 1111 111...