1樓:網友
test變數是無符號整型,列印時要輸出悉鬥%d,是有符號整型,所以test強制孝陸塵轉換成有巧禪符號整型,0xffffffff就是-1
2樓:網友
你的定義裡面雖然是usigned int,但是後面輸出的時候用的亮友%d轉帆遲義符是有符號的型別,有符號數第一位如果是1那麼就是負數,你試試把後面一句敬轎槐改成printf("%u", test)看看是不是就對了。
3樓:風林火陰山雷
您好!很高興為您解答。
vc編譯器中,unsigned int型別的表示範圍是0~2^32-1,而輸出時是%d相當於有符號型-2^31~2^31-1,此時數唯檔乎據儲存時由補碼錶示。補碼即原碼(二進位)各位取反再加1 。
如果是16進位數0xffffffff,其實儲存時是二進位補碼111…… 1(32個1),按照補碼的規則,第一位是符號位,為1則是負數,為2則是正數(所以首先0xffffffff是個負數)。如果換算成原碼,補碼的第一位(最左)權重是-2^31,第二位是2^30,第三位2^29……最末位是2^0,因此計算得指悉原碼:-2^31×1+2^30×1+2^29×1+……2^0×1=-1 。
望~如您還有不解,歡蠢或迎追問~
4樓:網友
應該是超出unsigned int 的範圍了。
c語言中,程式段分析
5樓:嵇水元雨彤
同學,第乙個答案確是是"y=0"原因如下,首先我們要說自增和自減運算子。
」和「--如果該運算子的位置在運算元之前,則運算元在進行任何計算之前就已經發生改變,如果運算子在運算元後面,則運算元在完成表示式。
的計算之後才發生改變,例如int
a=5,b=8,c;c=a++*b;
+在運算元a後面,先計算a*b=40,賦值給c,然後a++,a值為6,c的值為40c=++a*b;
+在運算元a前面,先a++,a=7,再a*b,c=56然後我們來看你給的程式,因為是y--,在y後面,則先判斷while的條件,此時銀纖y=1,即true,為真,然後y--,y=0,然後輸出y:y=0;然後再判斷while,因為此時y=0,為假,跳出迴圈。
結束。要注意順序,先判斷whlie,然後y--,若while條件為真,則執行while的語句。
若改成"--y"的話,則先計算"--y",y=0,再判斷while的條件,此時y=0,即false,為假,直接跳出迴圈,即什麼都不做,結束。
第二題,你要注意的是while的條件不是"k==1"而是"鋒晌仿k=1",不是乙個判斷語句,而是乙個賦值語句。即while的條謹高件永遠都是「k被賦值為1,然後k作為條件」進行判斷,此時k是1,即true,為真會永遠進行下去。
6樓:曾彬薛平靈
1,while迴圈題。
輸出的結果為1
當執行到while語句時,y的值為1,此時並不執行y--,因蠢帆為--在後為後置運算,輸出1,執行y--,y的值為0,跳出迴圈,程式結束。結果為,迴圈次昌檔襪數為0
因為while迴圈語句中的k++是當k=1為真值時才執行的,而k被賦值為0此時不等耐激於1,k=1為假,迴圈體並不迴圈,所以次數為0.
7樓:江伶抗弘亮
intk=0;while
k=1)while迴圈執行的次數是0理由:while
迴圈橘野孝是先圓稿做判斷後在執行while快脊滲裡面的語句的。
一小段C 程式
if letter 這句話是判斷 letter的值,如果為0,則 if letter if c a c z c c 32 這一段 不進行編譯,而是編譯以下的 else if c a c z c c 32 letter的值如果為1,則相反,編譯 if c a c z c c 32 而不編譯 if c ...
c語言,有以下程式段,C語言,有以下程式段
a i p 是先a i p然後p再指向下陣列一位 所以你的那個for迴圈並沒有改變陣列a p 即為 p 程式先算 p 2,然後 後為3 即輸出3.輸出結果6 a 2 被初始化為6啊,你輸出的當然是6了.p是一個指標,它所代表的是一個位置,在這裡 p a表示指標p指向a所在的位置,也就是a所儲存的地址...
那個大哥來幫我改下錯c一小段
其中有幾個問題 1.disks 這個沒定義 2.hanoi 類沒有實現建構函式 3.你是int main 所以最後要加個return o避免vc編譯發生警告 正解如下 include include using namespace std class hanoi hanoi hanoi int di...