1. 程式人生 > >第四次學習筆記(c語言基礎)

第四次學習筆記(c語言基礎)

scanf 變量賦值 原始數據類型 多少 int 無符號數 %d 輸出 運算

1.數據類型 (1)常量與變量 (2)c語言一共有32個關鍵字 (3)變量定義:數據類型 變量名(標識符) 變量賦值:變量名=值 (4)標識符命令規則: 1)不能是關鍵字 2)標識符只能由字母、數字、下劃線組成 3)見名知義 4)第一個字符必須為字母或下劃線 5)不能和同一函數內的其他標識符重復 6)標識符命名大小寫 (5)常量定義: 1)const 數據類型 常量名 2)#define【宏定義】 常量名 數值 ①註意;通過#define 定義的常量是根據值來匹配數據類型的 ② const 修飾的常量是不安全的,可以通過指針來修改 2.進制 (1)二進制:逢二進一 二進制轉化為十進制: 權值法:二進制各個位數乘以2的n次冪,結果相加 (2)十進制轉化為二進制:除二取余法 (3)八進制和二進制轉化: (4) 十進制轉化為八進制:除八取余法 (5)八進制轉化為十進制:權值法 (6)八進制和二進制轉化:一位對三位 (7)十進制轉化為十六進制:除十六取余法 (8)十六進制轉化為十進制:權值法 (9)十六進制和二進制轉化:一位對三位 A-F字符不分大小寫 3.進制在程序中打印: int a=10;//十進制中的10 int b=010;//八進制中的10 在定義一個八進制數需要在數前面加上0區分 int c=0x10;//十六進制中的10 在程序中定義一個十六進制數需要在數前面加上0x區分 int d=0X10;//十六進制中的10 在程序中定義一個十六進制數需要在數前面加上0X區分 %d 將數據按照十進制輸出 %o 將數據按照八進制輸出 %x 將數據按照十六進制小寫輸出 %X 將數據按照十六進制大寫輸出 二、計算機內存數據存儲方式 一個有符號的數據可以分為符號位和數據位 3、原碼、反碼、補碼
一個有符號的整型數據可以分為兩部分一部分是符號位、一部分是數字位 無符號數據類型只包含數字位部分 signed int a= 1986(有符號標識 signed可以不用寫) 二進制:11111000010 1986原碼:0000 0000 0000 0000 0000 0111 1100 0010 -1986原碼:1000 0000 0000 0000 0000 0111 1100 0010 1986反碼: 0000 0000 0000 0000 0000 0111 1100 0010 -1986反碼:1111 1111 1111 1111 1111 1000 0011 1101 1986補碼: 0000 0000 0000 0000 0000 0111 1100 0010 -1986反碼:1111 1111 1111 1111 1111 1000 0011 1110 1 0000 0000 0000 0000 0000 0000 0000 0000
溢出:在數據進行操作的時候會導致超出數據類型大小,會向前位進1,多於原始數據類型大小,會被系統自動舍棄 保留從後面開始數據類型大小的位數 10+20 0000 1010 0001 0100 0001 1110 -10+-20 原碼:1000 1010 反碼:1111 0101 補碼:1111 0110 原碼:1001 0100 反碼:1110 1011 補碼:1110 1100 1111 0110 1110 1100 補碼:1110 0010 反碼:1110 0001 原碼:1001 1110 16+8+4+2=-30 練習:用生辰年份年去生辰日期 1992 -326 1、將10進制轉化為二進制 1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :0000 0000 0000 0000 0000 0001 0100 0110 2、加符號位將數據變為原碼 1992 :0000 0000 0000 0000 0000 0111 1100 1000 -326 :1000 0000 0000 0000 0000 0001 0100 0110 3、轉化為反碼 1992 :0000 0000 0000 0000 0000 0111 1100 1000 -326 :1111 1111 1111 1111 1111 1110 1011 1001 4、將反碼+1轉化為補碼 1992 :0000 0000 0000 0000 0000 0111 1100 1000 -326 :1111 1111 1111 1111 1111 1110 1011 1010 5、計算補碼 1992 :0000 0000 0000 0000 0000 0111 1100 1000 -326 :1111 1111 1111 1111 1111 1110 1011 1010 結果 : 1 0000 0000 0000 0000 0000 0110 1000 0010 6、將數據轉化為10進制 110 1000 0010 2+128+512+1024 = 1666 無符號: unsigned int a= 1986 無符號:1111 1111 1111 1111 1111 1111 1111 1111 = 0000 0000 0000 0000 0000 0000 0000 0000 =0 無符號整型取值:0-4294967295(2^32-1) 無符號的字符型:0-255 有符號: int a= 1986 0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647 0000 0000 0000 0000 0000 0000 0000 0001 原碼: 1111 1111 1111 1111 1111 1111 1111 1111 = -2147483647 反碼:1000 0000 0000 0000 0000 0000 0000 0000 補碼:1000 0000 0000 0000 0000 0000 0000 0001=-2147483647 -0的補碼 補碼:1000 0000 0000 0000 0000 0000 0000 0000=-0 = -2147483648 4、sizeof() 求出數據類型在內存中占的大小(BYTE) int value =sizeof(變量名); int value = sizeof(數據類型) sizeof 數據類型 註意:根據32位操作系統獲取的數據類型大小 char(字符型)【1】<short(短整型)【2】 <=int(整型)【4】|float (單精度浮點型)【4】|long(長整型)【4】 <long long(長長整型)【8】|double(雙精度浮點型)【8】 輸出和輸入: 輸出字符的兩種方式: 1、printf("%c",變量) 2、putchar(字符) 輸入字符的兩種方式: 1、scanf("%c",&b變量) 2、變量=getchar() 數值溢出: char 1B=8bit 0x7f 0111 1111 0000 0010 1000 0001 1000 0000 1111 1111 -127 0xff 1111 1111 0000 0001 1 0000 0000

思考任務(課後練習)

  1. 八進制必須以__0___開頭,十六進制必須以___0x____開頭。
  2. 標識符只能由___數字____、__字母_____和__下劃線_____組成。
  3. 在計算機中的進制表現形式有三種,分別是__十進制___、 __八進制_____、 _十六進制_______。
  4. C 語言提供了 sizeof 運算符,該運算符主要用於__計算數據類型字節數______。
  1. 二進制和八進制相互轉換
111 010 101 011 轉換為八進制後結果為? 7253 76321 轉換為二進制結果為? ?00010010101000100001?
  1. 二進制和十六進制相互轉換
1111 1010 1101 1011 轉換為十六進制後結果為? fadb a6b2f1 轉換為二進制結果為? 1010 0110 1011 0010 1111 0001
  1. 請寫出-8的原碼、反碼、補碼
原碼:1000 0000 0000 1000 反碼:1000 0000 0000 1001 補碼:1111 1111 1111 0110
  1. 計算如下程序結果
short a = 0xfffe; printf("%d\n", a); //結果為多少? -32766 unsigned short a = 0xfffe; printf("%u\n", a); //結果為多少? 65534 short a = 0x7fff + 2; printf("%d\n", a); //結果為多少? 1 unsigned short a = 0xffff + 5; printf("%u\n", a); //結果為多少? 5

第四次學習筆記(c語言基礎)