1樓:匿名使用者
樓主你好。答案是-32768.原因如下:
32767在記憶體中以2進位制存放 0111111111111111加一後:1000000000000000
而這正是-32768的補碼。這就是運算元超過了最大能表示的範圍,運算溢位。
如果想得到正確結果可以吧a,b改為long型變數。希望對你有幫助。
2樓:
-1正數最大值是32767,負數最小值是-32768從 0到 32767,用二進位制是從:00000000到01111111 ①
從-1到-32768,用二進位制是從:11111111到10000000 ②
注意到:①和②裡對應的數相加是:11111111.
3樓:彩虹的一隻
首先定義了兩個整數 a 和 b
a賦值為32767
b=a+1即32768
printf的意思是在控制檯中顯示引號中的字串%d指的是顯示逗號後面b的值
因此會在控制檯顯示b=32768
如果還不明白可以再追問
4樓:
void main()
結果:b=32768
5樓:
這有什麼好解釋的呢?
初學者吧? 多看看書就明白了。
答案32768
(32767+1)
6樓:小飛花兒的憂傷
32768,32位系統裡面整型佔四個位元組,32768完全放得下。
如果你想知道溢位怎麼回事,自己去看數在計算機裡的表示,以及數是怎麼運算的
7樓:黑海豹子
樓上說的都是有道理的,不同的編譯環境下的結果是不一樣的,這主要是因為int的定義不一樣而已,樓主的問題可能是那本教材上的經典的問題,int是一個機器字長(c++primer第四版中31頁講的很詳細,建議樓主看看)但int最小儲存空間是16位,那問題就是我用32位表示int還是16位表示,這才是問題所在,現在的機器都達到了64位了,如果是16位表示一個int,那麼是溢位的,如果是32位表示int,那麼一樓的說法是沒有錯的,有的書籍是在以前的基礎環境下寫的也是跟不上計算機的發展的,這也體現古人的一句話:盡信書不如無書!
8樓:
你的編譯器預設int型是2位的 也就是16bit 最大11111111 11111111 當a再加1的時候就是溢位
1 00000000 00000000 這時編譯器會把最前面的1看成是符號位 所以最後的結果就是-32768
9樓:匿名使用者
加1之後溢位,b = -32768(成了最小值)
急~~~~~~~~~~一個簡單的c語言問題,求高手解答。
10樓:匿名使用者
交換字串元素時,不應該用n,而應用字串的長度,因為你輸入的數字不一定總有n位整數。
修改如下:
#include
#include
#include ////注意這裡
#define n 30
void main()
printf("%s\n",str);
11樓:匿名使用者
你那樣是在太沒意義了~
直接改成這樣就可以了
#include
#include
#include
#define n 30
void main()
12樓:
for(i=0;i 數字才幾位 你就把全部30個都倒序了 除了有效的幾位數字剩下的 都是亂碼 i=0; while(n) str[i]=0; puts(str); 這樣就好了 13樓:殷順堯 把n巨集定義為2,輸入65,就能夠得到你要的結果56了。 如果是30,long型整數輸入位數有限,例如輸入65,儲存到str中,前兩位是6,5,後面是隨機值,倒序就會出問題的。 14樓:護戒之淼 可能是\0轉換的時候出現的吧 考慮字串最後的\0 有一段比較簡單的c語言**,求高手給出每一步的詳細解釋! 謝謝 15樓:匿名使用者 函式fun1的作用是輸出引數指標所指的字串; #include void fun1(char *str) //建立函式fun1,無返回值,引數為字串指標 main() 16樓:匿名使用者 其實這個迴圈的整個過程就是將num的數值倒序過來,如123,倒序後就是321,。迴文數有個特點正序和倒序,數值都是相等的,其他數就不會有這種特點。可以拿個數值試試。 num = 121 第一次迴圈:res = 1;rev = 0 * 10 + 1 = 1; temp = 12; 第二次迴圈:res = 2, rev = 1*10 + 2 = 12; temp =1; 第三次迴圈:res = 1, rev= 12 * 10 + 1 = 121; temp = 0; 迴圈結束後:rev == num,是迴文數 num = 123 第一次迴圈:res = 3;rev = 0 * 10 + 3 = 3; temp = 12; 第二次迴圈:res = 2, rev = 3*10 + 2 = 32; temp =1; 第三次迴圈:res = 1, rev= 32* 10 + 1 = 321; temp = 0; 迴圈結束後:rev != num,不是迴文數。 還有一種方式:分解出num所有位的數值,然後將最高位和最低位比較是否相等,如不相等,則說明不是迴文數,如相等再比較次高位和次低位是否相等,依次這樣比較下去。 temp = num; int a[10];這裡設定10個元素,原因是int型別的最大數值為4294967296,總共十位 int i = 0; int result = num; while(result!= 0) a[i] = result; // 儲存最高位 bool bresult = true; //初始認為該數為迴文數 for(int j =0; j <=i; j++,i--) }if(bresult == true) else 演算法很簡單,拿個數值,按著**一點點算就明白是什麼意思了。 17樓: 因為 "hello!" 這是一個字串 而 char 型別 只可以儲存一個單個字元 那麼要使用char 來儲存字串 也就要使用 很多char來存字串的每一個字元所以要使用 char 陣列 寫成 char 也就是char 陣列的意思 18樓:圖卷 擬採用 eridefx 的答案吧,說的很詳細,用指標才能傳遞值。 19樓:匿名使用者 這段程式都看不懂還學什麼c語言。 一道c語言的簡單問題求高手解答,求字串中不同字母個數 20樓:我才是淡淡 就一個問題,新分配copy 的記憶體沒有初始化,所以說結果是很不確定的,「運算出來不同字母數總是會比實際數多一個」,我這裡多出了很多哦~ 修改之後執行正常: 當然了,也可以搞點專業的做法: 我裝逼結束了。嗯,就是這樣。 求高手解答一個c語言問題,,要帶上解釋喲,,,謝謝~~ 21樓:匿名使用者 選擇b。 首先執行到if裡面的++i 語句,首先i就加了一個1,因此i=1,判++i > 0時為真,而後面的表示式++j > 0就不會做計算了(總表示式已為真),然後a = a + 1。因此列印1, 0, 7。 另外注意一點,(表示式1 && 表示式2)這個式子中表示式1為假時,表示式2不會計算。 (表示式1 || 表示式2)這個式子中表示式1為真時,表示式2不會計算。 22樓:匿名使用者 bif((++i>0)||(++j>0)a++;這一句中 i 首先進行自增操作 i = 1了,然後跟 0比較,大於0,已經滿足或運算子為真的判斷,直接進行 a自增操作,j不自增了。所以答案為b 一道簡單的c語言題目,求高手找錯誤 23樓:匿名使用者 可能多組測試是一次進行的,試一下用 完整**如下 #include int main() for(i=0;i=b) }if(i==n) printf("impossible\n");//這裡沒有換行,已改}return 0;} 幫你寫好了,這裡幫你編譯執行了,沒任何問題,不放心的話你自己試試struct staff int main void if head null puts 沒有任何資料,抱歉!else current head while current null current head while current... 典型的求素數的 這是等於是可能的 如果不是素數,那麼k不等到i就break跳出迴圈了,這個你明白 所以k小雨i的時候就不是素數 如果是素數,那麼k會迴圈到i,這個是for的機制得出的。那麼k和i相等 所以判斷是否是素數的條件就是判斷k和i是否相等 只要k不大於i即使素數,大於等於包含等於,所以可以這... 的優先順序比 高 c a b 2相當於c a b 2 c a 1 c 00000011 單目運算子 算術運算子 移位運算子 關係運算子 邏輯運算子 條件運算子 賦值運算子 逗號運算子 單目運算子 邏輯非運算子 按位取反運算子 字首增量運算子 字首減量運算子 正號運算子 負號運算子 型別 型別轉換運算...c語言問題求高手解答,C語言問題求高手解答
c語言問題,求高手指教,一個C語言問題,求高手指教!
簡單c語言問題,求教,簡單C語言問題,求教