上一篇:http://www.BkJia.com/kf/201202/121049.html
一.
在內存中存儲定點數時,一般以其最高位(最左邊一位)表示數的符號,0表示正,1表示負。數值是以補碼形式存放的。一個正數的補碼就是該數的二進制數。一個負數的補碼我們通過下面的方法求得:
(1)先取該數的絕對值
(2)然後以二進制數的形式存放
(3)再對其取反
(4)然後加1
所有負數的二進制補碼的最高位必然為1.
顯然,無符號的正數的最大值約為有符號的正數的最大值的兩倍再加1(因為補碼有正0和負0)。在C語言中,實數(浮點型)都是有符號的,不可以使用無符號修飾符。
二.
常用數據類型的長度:(1B = 8bit)
char:1B
short:2B
int:4B
long:4B
float:4B
double:8B
long long:8B
三.
字符類型的數據在內存中是以相對應的ASCII碼存放。
四.
打印人民幣符號printf("Y\b=\n");控制代碼"\b"使打印頭退回一格,回來打印好的Y位置再打印字符“=”,兩個字符重疊形成人民幣符號。當然,這一輸出只能在打印機上實現,而不能在顯示器上實現。因為顯示器沒有重疊顯示功能。
五.
對一格變量進行顯示轉換後,得到另外一格類型的數據,但原變量的類型不變。
六.
Printf()函數一般形式如下:
int printf(格式控制字符串,輸出表達式1,輸出表達式2,...);
格式控制字符串由兩部分組成:格式說明字段和普通字符。普通字符(包括轉義符序列)將被簡單的復制並顯示。一個格式說明字段將引起一個輸出參數項的轉換與顯示,它是由"%"引出的格式說明字段。格式說明字段與後面的輸出表達式參數要對應一致。
% 前綴修飾 域寬 精度 長度修正符 格式碼
-,0,+,空格,# 十進制整數 十進制整數
需要指出的是:輸出數據的實際精度並不主要取決於格式說明字段中的域寬和精度,也不取決於輸入數據的精度,而主要取決於數據在機器內的存儲精度。例如,一般C語言系統對float數據只能提供6為有效數字。格式說明字段中所指定的域寬再大,精度再長,得到的多余位數上的數字是毫無意義的。所以,增加域寬與精度並不能提高輸出數據的實際精度。
七.
當年困擾自己的一個問題
#include<stdio.h>
int mian(void)
{
Int a = 1, b = 2;
Printf("x = %d, y = %d\n", ++a + b, ++b + a);
Return 0;
}
程序執行結果為x = 5, y = 4
原因在於printf()函數中輸出表達式的運算順序是由右向左的。但是應注意此規則會因編譯程序的不同而不同。所以,我們盡量確保在輸出時,輸出表達式不能相互影響,要確實是一個固定的值。
八.
在輸入數據時,實際上並非輸入一個數據項就送給一個變量,而是在輸入一行字符並按enter鍵之後才被輸入,這一行字符先存放在一個緩沖區內,然後按照scanf()格式說明的要求從緩沖區中讀取數據,如果輸入數據多於一個scanf()鎖要求的個數,那麼余下的數據將作為下一個scanf()接著使用。為了保持輸入的一致性,可以在格式串中的不同類型轉變處添加顯式的空白。scanf("%d %c %c %d %lf", &num, &name, &sex, &age, &salary);
當定義中有字段寬度時,scanf()將在緩沖區中的輸入流上,按照寬度有間隔的挑取字符。
scanf("%3c%3c", &c, &d); 如果我們輸入為abcd,那麼c=a, d=d;
九.
在執行getchar()時,雖然是每次讀入一個字符,就回顯一個字符,但並非從鍵盤輸入一個字符,該字符就立即送給一個字符變量,而是等到按Enter後,才將一行字符輸入緩沖區,然後getchar()函數從緩沖區中取一個字符送給一個字符型變量。這種情況成為行緩沖。