day02 - C語言 常量 變量 數據類型 進制轉換 數據溢出

常量 - 不會變化的數據

  • “hello” ‘A’ 10 3.14
  • #define PI 3.14 //採用宏定義的方法 定義一個常量
  • const int a = 10;

求圓的面積和周長

#include <stdio.h>

#define PI 3.14
int main(void)
{
	//圓的面積 s = r * r * PI
	int r = 3;

	float s = PI * r * r;

	//圓的周長 l = 2 * PI * r
	float l = PI * r * 2;


	printf("圓的面積是%f\n",s);
	printf("圓的周長是%f\n",l);
	//保留小數點後兩位
	printf("保留小數點後兩位後的結果,對第三位進行四捨五入後的結果\n");
	printf("圓的面積是%.2f\n",s);
	printf("圓的周長是%.2f\n",l);
	
	return 0;
}

變量 - 會變化的數據

定義語法

類型 名 變量名 = 變量值;

int x = 123;

變量三要素

  • 類型名
  • 變量名
  • 變量值 可以使表達式,也可以是常量

存儲空間

每一個存儲空間都有 0xaabb 類似的指針指向的地址

空間大小由變量類型決定,比如說int是 4 字節

變量的定義和聲明區別

定義是賦值了

int x = 123;

聲明沒有賦值

int a;

extern int a; 有 extern關鍵字就不會提升爲定義了

區別:

  • 變量定義會開闢內存空間
  • 變量 聲明不會開闢內存空間,變量沒定義,使用之前會自動尋找變量聲明提升爲定義
  • 變量要想使用,必須要定義,沒寫就自動給值

標識符

命名規則

  • 常量 大寫
  • 變量 小寫
  • 只能使用字母,數字,下劃線(_)
  • 數字不能開頭

整型

定義

short

int

long

long long

輸出

%d

sizeof求佔用空間大小

#include <stdio.h>

int main(void)
{

	short s = 1;
	int a = 40;//
	long l1 = 111111;
	long long ll1 = 9999999999999999999;

	printf("short大小爲:%d個字節\n",sizeof(s));
	printf("int大小爲:%d個字節\n",sizeof(a));
	printf("long大小爲:%d個字節\n",sizeof(l1));
	printf("long long大小爲:%d個字節\n",sizeof(ll1));
    
    printf("short大小爲:%d個字節\n", sizeof(short));
	printf("int大小爲:%d個字節\n", sizeof(int));
	printf("long大小爲:%d個字節\n", sizeof(long));
	printf("long long大小爲:%d個字節\n", sizeof(long long));

	return  0;

}

輸出

short大小爲:2個字節
int大小爲:4個字節
long大小爲:4個字節
long long大小爲:8個字節



short大小爲:2個字節
int大小爲:4個字節
long大小爲:4個字節
long long大小爲:8個字節

有符號整型signed 有符號可以爲正數或負數

超級不常用

signed int a = 10;

無符號類型unsigned 無符號一定是正數

unsigned int a = 10; //表示a 一定是無符號,指的是數據量,不表示方向(沒有正負 )

數據類型

整數類型總結

有符號類型signed

short %hd 2字節

int %d 4字節

long %ld 4字節 Windows32位和64位都是4字節,linux 32位是4字節,64位是8字節

long long %lld 8字節

無符號類型unsigned

unsigned short %hu 2字節

unsigned int %u 4字節

unsigned long %lu 4字節 Windows32位和64位都是4字節,linux 32位是4字節,64位是8字節

unsigned long long %llu 8字節

字符類型char

char c = ‘A’ ;//單引號

#include <stdio.h>

int  main(void)
{
	char c = 'A';
	printf("%c\n",c);  //A
	printf("%d\n",c);  //65
	c = '#';
	printf("%c\n",c);  //#
	printf("%d\n",c);  //35
	c = 97;
	printf("%c\n", c); //a
	printf("%d\n", c);  //97

	return 0;
}

大小寫轉換

#include <stdio.h>

int main(void)
{
	//大小寫轉換 差32

	char c = 'M';

	printf("%c\n", c);

	c += 32;

	printf("%c\n",c);


	return 0;
}

認識幾個重要字符

‘A’ 65

‘a’ 97

‘0’ 48

‘\n’ 10

‘\0’ 0

轉義字符: ‘\’ 反斜槓,將普通字符轉爲特殊意義,也可以反轉

浮點型,小數型

單精度浮點型float 4字節

定義

float f = 1.234f
尾不加 f 默認是 double

​ 默認保留6位小數

無符號的單精度浮點型
unsigned float f = 4.234

輸出時候

用%f

用%.3f 控制小數點後位數

用%5.3f 控制小數點後位數,和所佔的空間

用%05.3f 控制小數點後位數,和所佔的空間,不足的地方用0表示

雙精度浮點型double 8字節

定義

double d = 5.324534

無符號的雙精度浮點型
unsigned double d = 5.7545

輸出時候

用%lf

用%.6lf 控制小數點後位數

用%8.6lf 控制小數點後位數,和佔8位空間

用%08.6lf 控制小數點後位數,和佔8位空間,不足的地方用0表示

有符號類型

#include <stdio.h>

int main(void)
{
	float f = 3.14f;

	double d = 4.566;
	//默認輸出小數點後6位
	printf("%f\n", f); //3.140000
	printf("%lf\n", d);//4.566000

	//可以通過.的方式限制小數點後面位數,多餘的 四捨五入,不夠的用0補上
	printf("%.2f\n",f);//3.14
	printf("%.3lf\n",d);//4.566

	//可以通過前面固定佔幾位的空間
	printf("%5.2f\n", f);// 3.14
	printf("%6.3lf\n", d);// 4.566

	//可以通過前面固定佔幾位的空間,不足的地方用0補齊
	printf("%05.2f\n", f);//03.14
	printf("%06.3lf\n", d);//04.566

}

科學計數法賦值

​ float f = 2.3e3f
​ float f = 2.3e-3f

進制轉換

計算機內部存儲 - 二進制

十進制轉二進制:

除二反向取餘

二進制轉十進制

按照 1*2的次冪來 相加,如果位上是0 就不相加了

2^10 = 1024

2^9 = 512

2^8 = 256

2^7 = 128

2^6 = 64

2^5 = 32

2^4 = 16

2^3 = 8

2^2 = 4

2^1 = 2

2^0 = 1

八進制轉十進制

定義八進制的語法:

056:零開頭,每位數是0-7之間

每一個位是8的幾次方

0 5 6

​ 5個8的一次方 = 40

​ 6個8的零次方 = 6

結果46

八進制轉二進制: 三位421法

除二反向取餘

056 對應二進制

按照421來,一個8禁止爲對應三位二進制

5的二進制是 101

6的二進制是 110

8進制056的二進制是

101 110


八進制05326轉二進制

101011010110

二進制轉換八進制

三位一組轉換成8進制,從右往前分

001 101 010 101 001

1 5 2 5 1

015251

十六進制轉十進制

十六進制表示方法:

0xFD89A2

A–10

B–11

C–12

D–13

E–14

F–15

​ 16^5 16^4 16^3 16^2 16^1 16^0

0x F D 8 9 A 2

​ 1048576x15 + 65536x13 + 4096x8 + 256x9 + 16x10 + 1 x 2

=15728640 + 851968 +32768 +2304 +160 +2

=16615842

十六進制轉二進制 四位8421法

0x 1A

1 A

0001 1010

00011010

二進制轉16進制 四位一算

0101 0101 1001 0010 1110

0x 5 5 9 2 E

0x5592e

輸出格式統計

格式 表示 類型
%d 有符號 - 十進制整型 int
%u 無符號 - 十進制整型 unsigned int
%o 八進制
%x 十六進制
%hd 有符號 - 短整型 short
%hu 無符號 - 短整型 unsigned short
%ld 有符號 - 長整型 long
%lu 無符號 - 長整型 unsigned long
%lld 有符號 - 長長整型 long long
%llu 無符號 - 長長整型 unsigned long long
%c 字符型 char
%f 浮點型 float
%lf 雙精度浮點型 double
%c 字符 char
%s 字符串 String
%m.d 實型 一共有m位(整數.小數.小數點),n位小數
%0m.d 實型 一共有m位(整數.小數.小數點),n位小數,前面不足用0表示

原碼反碼補碼

原碼

特點:

  • 最高位爲符號位,0表示正,1表示負

  • 其他樹脂部分就是數值本身絕對值的二進制數

  • 負數的原碼是在絕對值的基礎上,最高位變爲1

十進制數 原碼
+15 0000 1111
-15 1000 1111
+0 0000 0000
-0 1000 0000

反碼

特點

  • 對於正數:反碼和原碼相同

  • 對於負數:符號位不變,其他部分取反0變1,1變0

十進制數 反碼
+15 0000 1111
-15 1111 0000
+0 0000 0000
-0 1111 1111

補碼 (現今計算機採用的存儲方式)

特點

  • 正數的原碼反碼補碼都一樣

  • 負數的補碼是: 反碼基礎上+1

  • ​ 最高位表示符號位

  • ​ 其餘位取反 + 1

43-27 ==> 43 + -27

00101011

​ 10011011

​ 11100100

11100101


00010000

算出來是二進制16

人爲規定

00000000 ==> 0

11111111 ==> -128


char類型 8個比特位,最高表示符號,數值位有7個

​ 最大數值就是-2^7 到 2^7-1 (因爲多了一個0) = -2^(8-1) 到 -2^(8-1)-1

​ -128~127

​ 而無符號位的第一位不用表示符號,就能表示 2^8 - 1(有一個0)個

​ 0 ~255

int類型4x8 = 32比特位個,最高位表示符號,數值位有31個

​ 最大數值就是-2^31 到 2^31-1(因爲多了一個0)

​ -2147483648 ~ 2147483647

​ 無符號整形就是:0 - 2^32 -1 0 ~ 4294967295

long類型 4x8 = 32比特位,最高位表示符號,數值位有31個

​ 最大數值就是-2^31 到 2^31-1(因爲多了一個0)

​ -2147483648 ~ 2147483647

​ 無符號長整形 首位作爲數值位了後範圍:04294967295(0(2^32-1)

long long類型 8x8 = 64bit

​ 範圍:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)

​ 無符號類型長長整型爲 0 ~ 1844 6744 0737 0955 1615 (1844*10^16)

數據溢出

char 取值範圍 -128 - 127

char c = 127+1;

= 01111111 +1

=10000000 = -128

10000001 = -127

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章