『壹』 C語言中如何定義一個不為負數的整形變數
unsigned int a;
表示定義一個不含負數的整型變數,unsigned表示沒有負數,int表示整型,a是變數名。
『貳』 C語言有關負整型數據輸出的問題
在機器中,所有的數都是以補碼的形式存儲的
輸出的形式不代表存儲的形式版
你應該知道printf函數的第權一個參數叫做什麼名字(格式字元串),說白了,printf是根據這個字元串來格式那個數字的!你要什麼格式,它就輸出什麼格式。
你用%d輸出,它定義的%d就是輸出正負號和十進制整數值。你用%o輸出,它定義就是不管什麼負號不負號的把八進制輸出出來。然而printf沒有定義帶符號八進制的輸出格式字串而已(因為沒有人習慣看到一個負的八進制或十六進制字元,只是感興趣除外)
其實,沒有必要去琢磨printf到底是怎麼輸出的,在你能看到的層面上,機器處理數據都是16進制的,而且是沒有+-的,你用反匯編軟體,用WinHex,用UtralEdit打開一個文件,你看到的最多是十六進制,你看到二進制沒有意義的,你看不明白,你也不需要看明白。
即使說printf的代碼是匯編寫的,你看到了,它只不過把每一位轉換成字元,寫到輸出緩沖區裡面,還是看不到補碼。
再補充一句,也可以這么理解,你用%o或%x輸出,printf把內存中的實際情況顯示出來了,你用%d輸出,printf自己在中間多了一次轉換,讓你看得更習慣了。
『叄』 關於在C語言中無符號整形存儲負數問題
你的理解是對的來。
最高位為源1時,對於有符號來說,這個數是負數,而對於無符號數而言,由於最高位也是有效存儲位,所以可以存儲更大范圍的數。
話再說回來,既然是無符號數,輸出格式應該是"%u",而不是"%d",這樣才能做到「表裡如一」,「改頭換面」只會亂了自己,這不是游戲,嚴謹是必須的。
『肆』 C語言中如何將字元串轉化為整型數,注意負數處理方法
#include<stdio.h>
#include<string.h>
#include<assert.h>
intatoi(char*s)
{
assert(s&&strlen(s));
intflag=1;
intret=0;
while(*s=='-'&&++s&&(flag=-1)==1||*s!='