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...