第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

類型轉(zhuǎn)換 - unsigned to signed int / char

類型轉(zhuǎn)換 - unsigned to signed int / char

C
繁星點(diǎn)點(diǎn)滴滴 2019-08-16 17:13:07
類型轉(zhuǎn)換 - unsigned to signed int / char我試過(guò)執(zhí)行以下程序:#include <stdio.h>int main() {     signed char a = -5;     unsigned char b = -5;     int c = -5;     unsigned int d = -5;     if (a == b)         printf("\r\n char is SAME!!!");     else         printf("\r\n char is DIFF!!!");     if (c == d)         printf("\r\n int is SAME!!!");     else         printf("\r\n int is DIFF!!!");     return 0;}對(duì)于這個(gè)程序,我得到輸出:char是DIFF !!! int是相同的!為什么我們兩者都有不同的輸出?輸出應(yīng)該如下?char是相同的!int是相同的!一個(gè)鍵盤連接。
查看完整描述

3 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

這是因?yàn)镃中的各種隱式類型轉(zhuǎn)換規(guī)則.C程序員必須知道其中有兩個(gè):通常的算術(shù)轉(zhuǎn)換整數(shù)提升(后者是前者的一部分)。

在char情況下,你有類型(signed char) == (unsigned char)。這些都是小整數(shù)類型。其他這樣的小整數(shù)類型是boolshort。該整數(shù)提升規(guī)則指出,當(dāng)一個(gè)小的整數(shù)類型是操作的操作數(shù),它的類型將得到提升到int,這是簽署。無(wú)論類型是簽名還是未簽名,都會(huì)發(fā)生這種情況。

在這種情況下signed char,符號(hào)將被保留,并將被提升為int包含值-5 的符號(hào)。在它的情況下unsigned char,它包含一個(gè)值251(0xFB)。它將被提升為int包含相同值的。你結(jié)束了

if( (int)-5 == (int)251 )

在整數(shù)的情況下,您有類型(signed int) == (unsigned int)。它們不是小整數(shù)類型,因此整數(shù)促銷不適用。相反,它們通常通過(guò)算術(shù)轉(zhuǎn)換進(jìn)行平衡,該轉(zhuǎn)換聲明如果兩個(gè)操作數(shù)具有相同的“等級(jí)”(大?。┑灻煌?,則簽名操作數(shù)將轉(zhuǎn)換為與無(wú)符號(hào)操作數(shù)相同的類型。你結(jié)束了

if( (unsigned int)-5 == (unsigned int)-5)


查看完整回答
反對(duì) 回復(fù) 2019-08-16
?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

好問(wèn)題!

int比較有效,因?yàn)檫@兩個(gè)整數(shù)包含完全相同的位,所以他們基本上是相同的。但那是什么char?

啊,C 在各種場(chǎng)合暗中提升charint。這是其中之一。你的代碼說(shuō)if(a==b),但編譯器實(shí)際上轉(zhuǎn)向的是:

if((int)a==(int)b)

(int)a是-5,但是(int)b是251.這些肯定是不一樣的。

編輯:正如@ Carbonic-Acid指出的那樣,(int)b只有當(dāng)a char為8位長(zhǎng)時(shí)才是251 。如果int是32位長(zhǎng),(int)b則為-32764。

REDIT:如果一個(gè)字節(jié)長(zhǎng)度不是8位,那么就會(huì)有很多評(píng)論討論答案的本質(zhì)。在這種情況下唯一的區(qū)別是,(int)b不是251而是一個(gè)不同的數(shù),而不是-5。這與仍然非常酷的問(wèn)題無(wú)關(guān)。


查看完整回答
反對(duì) 回復(fù) 2019-08-16
  • 3 回答
  • 0 關(guān)注
  • 1144 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)