日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Standard C Episode 1

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Standard C Episode 1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Standard C Episode 1

計算機內存可以記錄大量的信息,只有記錄在內存中的信息才是可以使用的。計算機的內存管理者是操作系統。程序可以根據需要向操作系統申請存儲區,所有存儲區必須先申請并經過操作系統分配后才能由程序使用。我們知道計算機里的信息可以簡單劃分為:

?? ??? ??? ??? ?????? /指令
?? ?? /控制信息
信息 -?? ??? ??? ?\控制字
????? \數據信息
?? ??? ???? ? ? ? ? |
?? ??? ? ? ? /???? ? ? ? ?? \
???? 數值信息???? 非數值信息
????? /??? \?????????? ? ? ? ? ? ?? ? ? /? ? ?? \
?? 定點數? 浮點數?? 字符數據? 邏輯數據



C語言中,可以用變量來代表內存中的一個存儲區,并可以通過變量名來區分不同存儲區。源程序中可以通過變量聲明(定義)語句可以向操作系統申請存儲區。變量名可以代表兩個不同的東西,一是代表存儲區本身,二是代表存儲區里面存放的數據。
C語言變量分多種類型(數據類型),不同類型變量的數據信息在存儲區是有區別的,不同類型的變量可以參與的操作也是有區別的。

?

計算機中的內存基本存儲單元是字節byte,最小存儲單元是位bit,8bit組成一個字節。每個字節可以用來表示256個數字。我們之所以對計算機中的數據進行分組,劃分數據類型就是因為不同數據占有存儲空間不一。

字符類型一般占內存一個字節,因此可以通過數字表示256個不同的字符,256個字符各自對應著一個數字,這數字或者介于-127~127或者介于 0-255之間,具體字符所對應的數字取決于編譯器。但是一般對于0~127這部分數值和字符的對應關系都是固定的,都是有共識的,這就是ASCII碼 表。ASCII碼表規定了128個字符對應的數字。所以我們說ASCII碼表規定了字符到數字之間的對應關系,ASCII碼從0~127.這部分對應沒有 編譯器差異。
在C語言中使用char表示字符類型,該類型的字符和數字的對應關系取決于編譯器,但是對于0~127這部分數字對應的字符是符合ASCII碼規定的。
在C語言中還有unsigned char,叫做無符號字符類型。該類型字符和數字對應關系式固定的,沒有編譯器差異。當然對于0~127這部分數字對應的字符依然是符合ASCII碼規定的。



short叫做短整型類型,一般占有2byte,可以表示65535個數字。
unsigned short叫做無符號短整型,一般占有2byte,可以表示65535個數字,而且全部是無符號數,全是正數,數值范圍是[0,65534]

long叫做長整型,一般占有4byte
unsigned long叫做無符號長整型,一般占有4byte

int叫做整型,一般占有4byte
unsigned int叫做無符號整型,一般占有4byte

float叫做單精度浮點數類型,一般占有4byte
double叫做雙精度浮點數類型,一般占有8byte
long double叫做高精度浮點類型,一般占有12byte
--->以上說的是一般情況,實際應該視計算機平臺而定,例如我的計算機lotus-Laptop用sizeof操作符查看結果如下:

1 // $./a.out 2 // sizeof(char) ===>1 byte 3 // sizeof(unsigned char) ===>1 byte 4 // sizeof(int) ===>4 byte 5 // sizeof(unsigned int) ===>4 byte 6 // sizeof(unsigned) ===>4 byte 7 // sizeof(short int) ===>2 byte 8 // sizeof(short) ===>2 byte 9 // sizeof(unsigned short) ===>2 byte 10 // sizeof(unsigned short int) ===>2 byte 11 // sizeof(long int) ===>4 byte 12 // sizeof(long) ===>4 byte 13 // sizeof(unsigned long int) ===>4 byte 14 // sizeof(unsigned long) ===>4 byte 15 // 16 // -------------浮點數的機器碼由尾數和階碼組合而成,尾數是一個有符號數-------------- 17 // sizeof(float) ===>4 byte 18 // sizeof(double) ===>8 byte 19 // sizeof(long double) ===>12 byte

?




數值信息分定點數和浮點數。其中定點數也稱為整型數,浮點數也稱為實型數。

數值信息在機器中的表示:
?? ?數值信息在機器內的表達形式稱為"機器數",而"機器數"代表的數值稱為此"機器數"的真值。("機器數"采用的二進制編碼方法是補碼表示方法。)

數值信息在計算機內采用符號數字化處理后,計算機就可以識別和表示數值信息了,為了改進帶符號數值的運算方法,人們提出了數值信息的多種二進制編碼方法,多種編碼方法其實質都是在對負數的表示進行改造,原碼、反碼和補碼就是這樣。

原碼:符號-絕對值表示的編碼,稱為原碼。
反碼:正數的反碼表示與原碼表示一樣。負數的反碼的符號位與原碼相同,其余各位按位取反。
補碼:正數的補碼表示與原碼表示一樣。負數的補碼可由該數的反碼再加1求得。
--->補碼的好處是:(1)零的表示唯一(2)符號位可作為數值參加運算

對于原碼、反碼和補碼我們得出的結論是:
(1)計算機數值信息的"機器數"采用的是補碼,這樣可以簡化帶符號數值的運算
(2)正數的反碼和補碼和原碼相同
(3)負數補碼計算方法可以總結為對其相反數"按位求反再加一",其實質就是對負數的相反數求相反數。補碼的補碼就是原碼的相反數
(4)補碼參與運算的結果依然是補碼

##################################################
附:負數補碼計算方法"按位求反再加1"其實質就是求相反數,以下是簡明推理過程
以-13機器數的推理為例:
-13=?
-13+13=0

******** + 00001101 =? 00000000
******** + 00001101 = 100000000
******** = 100000000 - 00001101
******** =? 11111111 + 1 - 00001101
******** = 11111111 - 00001101 + 1
******** = 11110010 + 1
******** = 11110011

試求-51的機器碼?
-51=?
-51+51=0
******** + 00110011 =? 00000000
******** + 00110011 = 100000000
******** = 100000000 - 00110011
******** =? 11111111 + 1 - 00110011
******** =? 11111111 - 00110011 + 1
******** =???????????? 11001100 + 1
******** = 11001101

##################################################

?

?

?

?

C語言源程序中向指定存儲區存放數據的操作許多,其中賦值操作符是 = 是最核心的,該操作符可以把右操作數賦給左操作數,左操作數應該是一個允許存放數據的存儲區。我們把可以放在賦值操作符左邊的變量成為左值變量,把可以放在賦值操作符右邊的變量稱為右值變量。


ANSI C標準庫標準輸入輸出模型中,不管文本從何處輸入又或向何處輸出都將按照字符流處理,文本流是一個多行字符組成的字符序列,每一行行末都有一個換行符。(PS:往往程序可以通過統計換行符來得到總行數)


C語言源程序中,一個字符串常量應該用雙引號""括起來才行! 并且,一般地,一個字符串常量應該置于同一行才可以,因為編譯器是不會主動到其他行尋找字符串結束分隔符"的。 (PS: 當然,如果字符串常量被人為分散在多行,應該使用續行符號\來連接兩行,以方便編譯器認定一個完整的字符串)

?

?

1 /* 2 * printf格式控制字符串中轉義字符序列\r練習 3 * */ 4 5 #include <stdio.h> 6 7 int main() 8 { 9 long int integer = 0; 10 11 for (integer = 1; integer <= 987654321l; integer++) 12 if (integer % 4 ) 13 printf("."); 14 else 15 printf("\r"); 16 17 return 0; 18 }

?

1 /* 2 * printf練習 3 * 轉義字符序列 4 * */ 5 6 #include <stdio.h> 7 int main() 8 { 9 printf("\"\"\n");//輸出引號 10 printf("\\\n");//輸出反斜杠 11 printf("%%\n");//輸出百分號 12 printf("\a");//輸出一個蜂鳴聲 13 printf("abc\rxyz\n");//輸出abc后退回再輸出xyz 14 /*printf("\c\n");//編譯會出warning,提示有無法識別的轉義字符序列.進一步如果忽略warning,那么\c整體被忽略(也就是說\c根本就沒有被編譯入機器碼)*/ 15 16 printf("%x\n", '%'); 17 printf("\x5\n");//格式控制字符串中可以用轉義字符序列來實現通用的字符表達方式,通過使用轉義字符序列代表任意字符 18 19 return 0; 20 }

?

1 /* 2 * 3 * scanf練習 4 * */ 5 6 #include <stdio.h> 7 8 int main() 9 { 10 11 int integer = 0; 12 scanf("%d", &integer); 13 printf("%d\n", integer); 14 15 /* 16 int num = 0; 17 scanf("%d", num);//這樣的調用scanf()會引起編譯warning 18 //當gcc 02scanf.c -Wall編譯時,編譯器報warning 19 //如果忽略warning,所生成目標代碼執行時候可能引發操作系統強制終止代碼執行, 因為代碼執行至scanf("%d", num)時,將num當一個地址值使用,這樣可能會引起地址越界 20 printf("%d\n", num); 21 */ 22 23 return 0; 24 }

?

1 /* 2 * 打印C各數據類型當前占有的存儲空間大小(byte) 3 * */ 4 5 #include <stdio.h> 6 int main() 7 { 8 printf("int->%d\n", sizeof(int)); 9 printf("unsigned int->%d\n", sizeof(unsigned int)); 10 printf("unsigned->%d\n", sizeof(unsigned)); 11 printf("short int->%d\n", sizeof(short int)); 12 printf("short->%d\n", sizeof(short)); 13 printf("unsigned short int->%d\n", sizeof(unsigned short int)); 14 printf("unsigned short->%d\n", sizeof(unsigned short)); 15 printf("long int->%d\n", sizeof(long int)); 16 printf("long->%d\n", sizeof(long)); 17 printf("unsigned long int->%d\n", sizeof(unsigned long int)); 18 printf("unsigned long->%d\n", sizeof(unsigned long)); 19 printf("char->%d\n", sizeof(char)); 20 printf("unsigned char->%d\n", sizeof(unsigned char)); 21 printf("float->%d\n", sizeof(float)); 22 printf("double->%d\n", sizeof(double)); 23 printf("long double->%d\n", sizeof(long double)); 24 25 return 0; 26 } 1 /* 2 * sizeof()練習 3 * */ 4 #include <stdio.h> 5 6 main() 7 { 8 char character = 0; 9 unsigned char character_u = 0; 10 printf("char類型變量character占有%d個字節\n", sizeof(character)); 11 printf("unsigned char類型變量character_u占有%d個字節\n", sizeof(character_u)); 12 13 /*C語言中我們之所以區分數據類型,就是因為不同數據所占存儲空間大小不一*/ 14 printf("char類型變量占有%d個字節\n", sizeof(char)); 15 printf("unsigned char類型變量占有%d個字節\n", sizeof(unsigned char)); 16 }

?

1 /* 2 * sizeof()練習 3 * sizeof()只是用來計算操作數占有的存儲空間,它不影響操作數本身.請分析本例 4 * */ 5 #include <stdio.h> 6 7 main() 8 { 9 char character = 0; 10 11 character = 'a'; 12 printf("char類型變量character存放著%c, 占有%d個字節\n",character, sizeof(char)); 13 14 sizeof(character = 'b');//sizeof關鍵字可以對表達式的結果計算占有存儲空間大小,但是表達式中的所有修改都不會保留,所以本例程的兩行打印結果一樣。 15 printf("char類型變量character存放著%c, 占有%d個字節\n",character, sizeof(char)); 16 }

?

1 /* 2 * 3 * Discreption:計算87+97演示溢出的例程 4 * 當采用一個字節存儲時,87+97會溢出 5 * */ 6 #include <stdio.h> 7 main() 8 { 9 char c = 87; 10 printf("%d\n", c); 11 c = c + 87;//這里會溢出 12 printf("%d\n", c); 13 }

?

1 /* 2 * 操作符練習 3 * */ 4 5 #include <stdio.h> 6 main() 7 { 8 int num1 = 0, num2 = 0; 9 10 printf("15 / 7 = %d\n", 15 / 7); 11 printf("15 %% 7 = %d\n", 15 % 7); 12 num1 = num2 = 7; 13 printf("num1是%d, num2是%d\n", num1, num2); 14 num1 += 2;//num = num + 2; 15 printf("num1是%d\n", num1); 16 num1 *= 2 + 3;//復合賦值操作符的優先級和賦值操作符的優先級一樣,所以語句num *= 2 + 3;等效于語句num = num * (2 + 3); 17 printf("num1是%d\n", num1); 18 19 }

?

轉載于:https://www.cnblogs.com/libig/p/4100913.html

總結

以上是生活随笔為你收集整理的Standard C Episode 1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。