進(jìn)制
// 1.默認(rèn)就是10進(jìn)制
int num = 12;
// 2.在前面加上一個(gè)0就代表八進(jìn)制
int num1 = 014;
// %d是以十進(jìn)制的方式輸出一個(gè)整數(shù)
printf("%d\n", num1);
// %o是以八進(jìn)制的方式輸出一個(gè)整數(shù)
printf("%o\n", num);
// 在數(shù)值前面加上0b就代表二進(jìn)制
int num2 = 0b1100;
printf("%d\n", num2);
// 在數(shù)值前面加上0x就代表十六進(jìn)制
int num3 = 0xc;
printf("%d\n", num3);
// %x是以十六進(jìn)制的方式輸出一個(gè)整數(shù)
printf("%x\n", num);
// 口訣:不看你怎么存,只看你怎去取
進(jìn)制轉(zhuǎn)換
十進(jìn)制 -> 二進(jìn)制
轉(zhuǎn)換原理:除2取余 倒序讀取
二進(jìn)制 --> 十進(jìn)制
轉(zhuǎn)換原理:乘以2的冪數(shù)(冪數(shù)從0開(kāi)始), 然后相加
二進(jìn)制 --> 八進(jìn)制 進(jìn)制越大表示的位數(shù)就越短
規(guī)律:三個(gè)二進(jìn)制位代表一個(gè)八進(jìn)制位
因?yàn)?位的最大取值是7 而八進(jìn)制是逢八進(jìn)一
二進(jìn)制 --> 十六進(jìn)制
規(guī)律:四個(gè)二進(jìn)制位代表一個(gè)十六進(jìn)制位
因?yàn)?位的最大取值是15, 而十六進(jìn)制是逢十六進(jìn)一
原碼反碼補(bǔ)碼
二進(jìn)制的最高位我們稱(chēng)之為符號(hào)位
如果符號(hào)位是0代表是一個(gè)正數(shù),
如果符號(hào)位是1代表是一個(gè)負(fù)數(shù)
正數(shù)的特點(diǎn):(三碼合一) 正數(shù)的原碼就是TA的反碼就是TA的補(bǔ)碼
負(fù)數(shù):原碼符號(hào)位為1 其余與正數(shù)相同
反碼, 符號(hào)位不變其它位取反
補(bǔ)碼 反碼+1
結(jié)論:無(wú)論正數(shù)負(fù)數(shù)在內(nèi)存中存儲(chǔ)的都是補(bǔ)碼
位運(yùn)算
位運(yùn)算都是針對(duì)二進(jìn)制
& 按位與
特點(diǎn):只有對(duì)應(yīng)的兩位都是1才返回1 否則返回0
口訣: 一假則假
規(guī)律:任何數(shù)按位與上1結(jié)果還是那個(gè)數(shù)
| 按位或
特點(diǎn):只要對(duì)應(yīng)的兩位其中一位是1就返回1
口訣:一真則真
^ 按位異或
特點(diǎn):對(duì)應(yīng)的兩位不相同返回1 相同返回0
~ 按位取反
特點(diǎn): 0變1 1變0
左移右移
<< 左移
a << n 把整數(shù)a的二進(jìn)制位往左邊移n位
移出的位砍掉,低位補(bǔ)0, 發(fā)現(xiàn)左移會(huì)把原有的數(shù)值變大
注意點(diǎn):左移有可能改變樹(shù)脂的正負(fù)形
右移
a >> n 把整數(shù)a的二進(jìn)制位往右邊移n位
移出的位砍掉, 缺少的以為最高位是0就補(bǔ)0是1就補(bǔ)1(是在當(dāng)前操作系統(tǒng)下)
變量
// 變量為什么要有類(lèi)型? 每種類(lèi)型占用的內(nèi)存空間不一樣 int 4, char 1 double 8
// 只要定義變量, 系統(tǒng)就會(huì)開(kāi)辟一塊存儲(chǔ)空間給我們的變量存儲(chǔ)數(shù)據(jù), 內(nèi)存尋址是從大到小
// 越先定義的變量, 內(nèi)存地址越大
// 變量的地址就是所占的存儲(chǔ)空間最小的字節(jié)地址
// 注意: 由于內(nèi)存尋址是從大到小, 所以存儲(chǔ)數(shù)據(jù)也是從大到小的存儲(chǔ)(先存儲(chǔ)二進(jìn)制的高位, 再存儲(chǔ)低位)
// %p是輸出地址
// &變量名稱(chēng), 是取出變量的地址
例 printf("num = %p\n", &num);
char
char charValue;
charValue = 'a'; // 計(jì)算機(jī)智能識(shí)別0和1
// a == 97 == 01100001
類(lèi)型說(shuō)明符
類(lèi)型說(shuō)明符:
1.說(shuō)明長(zhǎng)度的(它可以用于修改類(lèi)型所占用的存儲(chǔ)空間的大小)
short; short == short int == 2個(gè)字節(jié) == %hi/ %hd
long; long == long int == 8個(gè)字節(jié) == %li / %ld
long long; == long long int == 8個(gè)字節(jié) == %lli / %lld
用于說(shuō)明數(shù)據(jù)類(lèi)型, 一般情況下和int配合使用
2.說(shuō)明符號(hào)位(它可以用于修改符號(hào)位是否用于正負(fù)數(shù))
unsigned; 無(wú)符號(hào) , 取值正數(shù)和零 == %u
signed; 有符號(hào), 默認(rèn)就是有符號(hào) , 取值 正數(shù)和零以及負(fù)數(shù)
3.不同類(lèi)型的說(shuō)明符可以混合使用
unsigned short
signed long
// 注意: 相同類(lèi)型不能在一起使用
unsigned signed
數(shù)組
數(shù)組的定義格式:
數(shù)據(jù)類(lèi)型 變量名稱(chēng);
數(shù)據(jù)類(lèi)型 數(shù)組名稱(chēng)[數(shù)據(jù)的個(gè)數(shù)];
元素類(lèi)型 數(shù)組名稱(chēng)[元素個(gè)數(shù)];
元素類(lèi)型: 就是數(shù)組中需要存儲(chǔ)的數(shù)據(jù)類(lèi)型, 一旦指定, 數(shù)組中就只能存儲(chǔ)該類(lèi)型的數(shù)據(jù)
元素個(gè)數(shù): 就是數(shù)組中能夠存儲(chǔ)的數(shù)據(jù)(元素)的個(gè)數(shù)
數(shù)組初始化
//依次將{}中的每一個(gè)值賦值給數(shù)組中的每一個(gè)元素
// 并且從0開(kāi)始賦值
// 也稱(chēng)之為數(shù)組的初始化(完全初始化)
部分初始化
// 默認(rèn)從0開(kāi)始初始化, 依次賦值
// 注意: 如果"在部分初始化中"對(duì)應(yīng)的內(nèi)存沒(méi)有被初始化, 那么默認(rèn)是0
數(shù)組的遍歷
// 取出數(shù)組中所有的值, 稱(chēng)之為遍歷
// 注意: 在遍歷數(shù)組的時(shí)候, 盡量不要把遍歷的次數(shù)寫(xiě)死
// 遍歷多少次應(yīng)該由數(shù)組來(lái)決定, 也就是說(shuō)遍歷多少次應(yīng)該通過(guò)數(shù)組計(jì)算得出
如: int length = sizeof(scores) / sizeof(scores[0]);