第四次學習筆記(c語言基礎)
阿新 • • 發佈:2019-04-11
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
思考任務(課後練習)
- 八進制必須以__0___開頭,十六進制必須以___0x____開頭。
- 標識符只能由___數字____、__字母_____和__下劃線_____組成。
- 在計算機中的進制表現形式有三種,分別是__十進制___、 __八進制_____、 _十六進制_______。
- C 語言提供了 sizeof 運算符,該運算符主要用於__計算數據類型字節數______。
- 二進制和八進制相互轉換
- 二進制和十六進制相互轉換
- 請寫出-8的原碼、反碼、補碼
- 計算如下程序結果
第四次學習筆記(c語言基礎)