為什麼c語言中 10》2 3的值為

2021-04-28 17:36:20 字數 2731 閱讀 1638

1樓:匿名使用者

1、做這個題,首先要知道,整數在計算機中是用補碼來存放的。

以一個位元組整數為例:

-10 的原碼為 10001010       第一位是符號位(1表示負數,0表示正數),其餘位表示數值

-10 的反碼為11110101        符號位不動,其餘位按位取反

-10的補碼=反碼+1= 1 1110101 +1 = 11110110

2、>>運算子的意義

>>運算子是位運算子,是個雙目運算子(雙目運算有左右兩個運算元), >>表示將左運算元右移,移動的位數由右運算元確定。

運算規則:右移運算是將一個二進位制位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位或者一律補0,或者補符號位,這由不同的機器而定。(一般是補符號位)

3、運算子優先順序(這個是規定)

根據優先順序規定,可知+運算子高於》運算子,要先算2+3=5,再算-10 >> 5 ;

4、計算-10>>2+3

-10>>2+3=-10>>5 = 11110110 >>5 = 11111111   移出位丟棄,高位補符號位1

補碼 11111111轉換為原碼(實際數值) 為 -1

先得到反碼:11111111-1=11111110

再得到原碼:10000001 即:-1

所以,-10>>2+3 = -1

ps:為了避免優先順序記不清楚,在程式設計時,應儘可能的加上括號,以提高程式的可讀性,以免出現不應該的低階錯誤,如:-10>>2+3寫成-10>>(2+3)會讓人更容易理解一些。

2樓:

不僅-10>>2+3=-1,而且-10>>4也=-1,-10>>6就更是-1了。這是因為

1.計算機中的整數都是用補碼錶示的,從最高位開始向右與到第一個0前是全1。

2.右移是保持最高位不變向事移的,就是說右移時從最高位填入的一直是1。

3.無論型別是多少位元組,全1都是-1的補碼。

另外在-10>>2+3中,+的優先順序高於》,所以-10>>2+3的意思是-10>>5而不是-10>>2再+3;-10的補碼是11110110,右移4位則是11111111,右移5位也是11111111,所以-10>>2+3=-1。

3樓:緣來丶緣淺

首先,得搞清楚右移操作符">>"和加操作"+"的優先順序:(優先順序部分截圖)

可見+操作優先順序高,所以這個問題也就是為什麼-10>>5的值為-1了-10的二進位制表示為"10110",將其右移,因為原來是負數,所以左邊高位用「1填補」,一共移動五次:

「11011」

「11101」

「11110」

「11111」

「11111」

"11111"表示的就是-1,所以值為-1

4樓:風追保羅

首先+的優先順序比》高,因此上述表示式變為-10>>5

計算機內部存的是補碼

負數的補碼等於其絕對值的原碼取反加1

移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是右移有關。如果是左移,則規定補入的數全部是0;如果是右移,還與被移位的資料是否帶符號有關。若是不帶符號數,則補入的數全部為0;若是帶符號數,則補入的數全部等於原數的最左端位上的原數(即原符號位)

因此步驟如下:

10的原碼                     0000 0000 0000 0000 0000 0000 0000 1010

取反                            1111  1111  1111  1111  1111  1111 1111  0101

加1得到-10的補碼:   1111  1111  1111  1111  1111  1111 1111  0110

向右移5位,前面補1:1111 1111  1111  1111  1111  1111  1111 1111

這個數就是計算機內部-1的表示

5樓:亥凝思

這就得從優先順序說起了,在-10>>2+3這個式子中,從左到右優先順序依次降低,轉換為邏輯就是-10右移2位後的數字加上3,首先10的邏輯為1010(二進位制),右移後0010,加上符號位,就是-2,再加上3,就是1了

,不懂可以再問

c語言 表示式3>2>1的值,答案是0,為什麼?

6樓:匿名使用者

首先,真為1,假為0,這是毋庸置疑的。

c語言中》是左結合的,也就是說當兩個》在一起的時候先算左邊的。

那麼3>2是真的,結果就是1;

1>1當然就是假的了。

所以結果為0。

7樓:華衣在盛

這屬於邏輯語句,3>2為真,即為1,1>1為假,故為0

8樓:匿名使用者

0是真的意思吧,也有可能在連續的符號下它只能為0

為什麼在c語言中關係表示式-3<-2<-1的值是0而不是1

9樓:匿名使用者

-3 < -2 為 1

而 1 < -1 為 0

所以 c 語言是不能這麼寫複合條件的,得用 -3 < -2 && -2 < -1

c語言中 以下執行的結果為什麼是2,0,3,-1?

10樓:匿名使用者

遠離c+=-a+++(++b||++c);這種表示式,工作中寫出這種式子是會***的,這就是無良考試出的極端誤導的題目

c語言中7 5值為什麼為2,還有5 10值為什麼為5能給個運

表示為取餘,5 10的值為0。中除數與被除數都須為整數。3 2為 1,3 2為1。取餘後的結果與被除數的符號一致。代表取餘數的 7 5 2 5 10 5 6 3 0 7除以5餘2,同理得後面的 7除5商1餘2,5除10商0餘2.為求餘運算子 兩邊只能為整數 c語言中7 5 2,為什麼 表示為取餘,5...

c語言中0102為什麼等於,c語言中0102為什麼等於

寫錯了吧。是 012 吧。0開頭的 012 是 八進位制整型 12,等於 十進位制 10printf d n 012 輸出 10若用 格式 o 則輸出 12 printf d n 010 2 010是八進位制數 十進位制8 8 2 10 以 d形式輸出 嘛?010是八進位制的10,換算成十進位制是8...

c語言中為什麼char a,C語言中char a 什麼意思,他和char ( )a 有什麼什麼區別?

char a abcd 中a指標指向的地址儲存的內容 abcd 為字串常量,是放在靜態儲存區 char a 10 儲存的內容放在棧上 用scanf 進行輸入操作時,只能修改棧中的變數值,靜態儲存區的常量值不能被修改,所以會報記憶體錯誤 char a char a 表示將變數 a進行強制型別轉換為ch...