1樓:只是建議
您好,這個問題是這樣的。請您注意看:
byte 是8位,所以可以表示 : 2 的8次方 = 256 個資料。取值範圍是:
-128 到 127 int 則不確定了。在 16 位的系統或編譯器上,可以表示 2 的 16 次方個資料。取值範圍大概是這個數除以 2 ,從負數到正數。
在 32 位的系統或編譯器上,可以表示 2 的 32 次方個資料。取值範圍雷同上述。64位系統上類推
而 char的取值範圍是 -257-256 範圍以內:那麼c1=305 實際上 計算機接受到c1的值為49 (305-256),而十進位制的49,對應的 char 型值為「1」,故輸出「1」。
同理,c2=340 ,對應您的計算機接受的c2的十進位制值為 84,對應的 char 型輸出結果為「t」。
2樓:
這個問題不難解決。
首先,printf如果按照%c來輸出的話,那麼c1就會被強制轉換成char來輸出(可以這樣理解)。
其次,因為ascll碼只有128位,如果c1超過128的話,那麼就會做類似取餘的操作(可以這樣理解,其實本質是直接對記憶體的截斷解析),也就是說第一行按照 (char)(c1 % 128) 和 (char)(c2%128)來輸出,也就是分別是1和t的ascll碼值。
最後,第二行的輸出就不用解釋了。不懂可以追問。
3樓:
printf是格式化輸出,c1、c2均是int整型資料。第一個printf格式化輸出%c為以字元型資料輸出,只能是取出c1、c2在記憶體中的前八位進行輸出。因此輸出變成了1跟t。
4樓:
整形數(四個位元組)305的十六進位制表示為0x0131。 當其轉換為字元形式(1個位元組)時,會截斷前三個位元組,只保留最後一個位元組。所以就變成了0x31,而『1』-1 = 48(也就是0x30)。
所以整形0x31對應的字元型別剛好是『1』。 同理,你可以理解340對應』t『了吧?
5樓:匿名使用者
int是四個位元組,char是一個位元組,計算機儲存是按照二進位制補碼來儲存的。把int轉換為二進位制總共有有32位,取後面的8位為插入的有效位,轉換為char型別的就是1和t。舉個例子吧,340轉換為二進位制為101010100(不足32位,前面用0補齊),取後面8位01010100轉換過來為84,而大寫t的asc ii碼為84,你輸出c2的char就是大寫的t,輸出c2的int就是本身340.
1是一樣的。
6樓:匿名使用者
你的第一個printf中char字元已經超出其範圍了 無符號性的在0~255,所以出現錯誤,
第二個printf中你輸出的是兩個c2 c2故都輸出340 340
7樓:
%c是以字元形式輸出
一個字元型變數只佔8位二進位制位
所以printf("%c %c\n",c1,c2);
實際上只輸出整型變數c1,c2的低8位二進位制位表示的整數,對應的字元
int c1=305==0000 0000 0000 0000 0000 0000 0001 0011 0001(二進位制)
低8位==0011 0001==49(10進位制) ---->ascii 碼值49,對應字元 1
int c2=340==0000 0000 0000 0000 0000 0000 0001 0101 0100(二進位制)
低8位==0101 0100==84(10進位制) ---->ascii 碼值84,對應字元 t
所以得出以上答案。
printf("%d %d\n",c2,c2);原樣輸出整數。
c語言輸出值為1.#r怎麼回事
8樓:四舍**入
童虎的輸入語句和計算語句的順序反了。
float r, h, s, v;
scanf("%f %f, &r, &h);
s = 2 * pi * r * h;
v = pi * r *r *h;
9樓:匿名使用者
你的r h在沒有輸入前,就對s v進行賦值,導致計算的結果不是一個有效資料。因為此時的r h的內容還是個隨機內容,不一定是合理的資料。
浮點型非有效浮點資料就是1.er這種顯示
在scanf()函式後面加賦值,如下:
scanf("5f %d", &r,&h );
s=2*pi*r*h;
v=pi*r*r*h ;
10樓:
輸入語句和計算語句的順序反了。你應該先輸入,再做計算float r, h, s, v;
scanf("%f %f, &r, &h);
s = 2 * pi * r * h;
v = pi * r *r *h;
11樓:百小度
額,你獲取到資料為什麼不用呢
scanf那句放在第一個float之後
多半是因為沒有初始化正確
c語言為什麼定義為int型輸出為字元型後會是這個結果?
12樓:匿名使用者
正常情況下,ascii可顯示字元在33到126之間,而超過256的數字,因為char只有8位,所以你的int就會被截斷,只保留後面8個2進位制位,即305的二進位制100110001就會變成(00110001),即49,相當於305-256,同樣的340一樣,會變成84,輸出的當然就是你看到了,你可以做個簡單測試
int i=305;
char c;
c=i;
i=c;
printf("%d",i);
13樓:
字元型都是char的8位二進位制數。。
當你int型用大於127的數要求顯示成%c字母時候,這時int的高8位數就會被忽略,而低8位直接轉換成字母char值,顯示出來。
如int c2=340; *****=340轉成16進製為0x0154,===低8位為54,將轉成字母顯示出來,而54的值正好是字母t的編碼,所以%c顯示為 t。
學程式設計最少要把基礎學好學會,才能進行真正程式設計。。多看例程,琢磨別人程式設計思路。
無思路不程式設計。
可以先自己檢視下ascii碼字元對照表,把顯示的字母對應什麼數字,然後反推過去。
c語言為什麼輸出一直為0?
14樓:慕容恆牟寅
我不知道你這個程式功能是什麼
目前發現你第二個for迴圈裡的if語句括號後面加了;
這個條件語句就不起作用了
還有不知道你為什麼要用break語句
如果你是想發生這個情況就跳出迴圈的話,應該把if後的語句用花括號括起來。
c語言為什麼不輸出
15樓:爻訊科技
if條件判斷應該是:
if (z == 'a')
if (z == 'b')
if (z == 'c')
16樓:真愛永遠在嗨
元宵夜,元春回孃家待了一會兒,要寶玉和眾姐妹獻詩。寶玉和黛玉兩小無猜,情意綿綿。書童茗煙將《西廂記》等書偷進園給寶玉,寶玉和黛玉一同欣賞。
寶玉庶弟賈環嫉妒寶玉,抄寫經書時裝失手弄倒蠟燭燙傷寶玉,王夫人大罵趙姨娘。趙姨娘又深恨鳳姐,便請馬道婆施魔法,讓鳳姐、寶玉中邪。癩和尚、跛道人擦拭通靈玉、救好二人。
c語言這個程式的輸出為什麼一直是0?
17樓:匿名使用者
沒仔細看,你首先你要知道的在c裡兩個整數相除的結果還是整數,所以象1/2結果就是0而不是你以為的0.5,需要寫成比如1.0/2或者(double)1/2或者1/2.0
c語言輸出數字圖案,C語言輸出數字圖案
這個有助於幫助你理解計算機顯示字元的方法和原理。首先要儲存每個數字字元的點陣資訊,每個點用1位二進位制數表示1表示有點0表示無點。分析一下,你的每個數字每行12字元,即12點,共18行,可以用16位二進位制陣列存放 那麼我們就開設陣列儲存unsigned short int num1 18 拿字元1...
c語言程式設計輸出圖形,C語言程式設計 輸出圖形
清風 1.n 5時,j 3,j 0 j j 0,1,2,3,各輸出一個空格。2.這個是i先加完在進行判斷,是否小於等於5,如果不小於等於,不會執行下面語句。3.這個是程式設計師自己想的演算法,他想要輸出這樣的模型,就自己想出了一個數學公式,按照這個公式來就可以了,並不是程式判斷要輸出這個圖形,他就自...
c語言輸出
去csdn上看看吧,應該有各種共享的,沒有的話就去官網下英文版的吧 樓主,貌似你的程式有問題把,應該是printf hello n 吧,而且你的 寫好了,還要在編譯器上編譯的,編譯器還要檢查你的 有沒有語法錯誤,所以,要編譯通過後,link過得到的exe增進才能執行的 c語言語句是要經過 編譯 連結...