C语言进制
一? 原碼、反碼、補(bǔ)碼
?
? ? 計(jì)算機(jī)存儲(chǔ)的數(shù)為補(bǔ)碼
? ? 數(shù)分為有符號(hào)(正、負(fù))和無(wú)符號(hào)(全是正)
?
? ? 原碼
? ? 正數(shù):數(shù)轉(zhuǎn)換為2進(jìn)制,最高位如果是0,則是整數(shù)
? ? 負(fù)數(shù):數(shù)轉(zhuǎn)換為2進(jìn)制,最高位如果是1,則是負(fù)數(shù)
? ? 反碼
? ? 正數(shù):整數(shù)的反碼還是它的原碼
? ? 負(fù)數(shù):除符號(hào)位不變,其它各位,逐位取反
?
? ? 補(bǔ)碼
? ? 正數(shù):整數(shù)的補(bǔ)碼還是它的原碼
? ? 負(fù)數(shù):反碼+1
?
? ? 2)為什么要使用補(bǔ)碼?
?
? ? 補(bǔ)碼主要是用于設(shè)計(jì)計(jì)算機(jī)的減法
?
? ? 3)已知負(fù)數(shù)的原碼求補(bǔ)碼
?
? ? 1)反碼:除符號(hào)位之外,取反
? ? 2)補(bǔ)碼:反碼+1
? ? 4)已知補(bǔ)碼求原碼:
? ? 補(bǔ)碼取反加1為原碼
?
二:位運(yùn)算:
?
? ? 一個(gè)數(shù)的二進(jìn)制機(jī)器碼之間的運(yùn)算
?
? ? C語(yǔ)言中的位運(yùn)算符介紹:
?
? ? 是一個(gè)雙目運(yùn)算,需要有兩個(gè)操作數(shù)
? ? 1)&? 按位與 (比較兩個(gè)數(shù)對(duì)應(yīng)的數(shù)碼,如果都為1,則結(jié)果為1)
? ? 口訣:同1為1
? ? 2)|? 按位或(比較兩個(gè)數(shù)對(duì)應(yīng)的數(shù)碼,如果有一個(gè)為1,則結(jié)果為1)
? ? 口訣:有1為1
? ? 3)^? 按位異或(比較兩個(gè)數(shù)對(duì)應(yīng)的數(shù)碼,如果兩個(gè)碼相同則為0,不同則結(jié)果為1)
? ? 口訣:相同為0,不同為1?
? ? 4)~? 按位取反(單目運(yùn)算,數(shù)碼逐位取反)
? ? 口訣:0變1,1變0
? ? 5)>> 按位右移?
? ? 表示所有的二進(jìn)制位,整體右移n位
? ? 注意:
? ? 1)數(shù)值得變化:每向右移動(dòng)1位相當(dāng)于除以2,保留整數(shù)部分
? ? 2)右移的時(shí)候,高位補(bǔ)符號(hào)位,低位直接舍棄
? ? 3)向右移動(dòng)的時(shí)候,不會(huì)改變一個(gè)數(shù)的正負(fù)性
?
? ? 6)<< 按位左移
? ? 表示:所有的二進(jìn)制位,都向左移動(dòng)
? ? 左移:
?
? ? 1)左移可以讓一個(gè)數(shù)變大
? ? 左移1次相當(dāng)于*2
? ? 2)左移可能會(huì)改變一個(gè)數(shù)的正負(fù)性
? ? 3)高位舍棄,低位補(bǔ)0
? ? 技巧:
? ? 1)任何數(shù)和1進(jìn)行按位與(&) 的到這個(gè)數(shù)的低位
?
三:變量的存儲(chǔ):
?
? ? 查看變量的地址使用 %p
? ? 1)內(nèi)存是由若干個(gè)1個(gè)字節(jié)的存儲(chǔ)單元組成
? ? 每個(gè)單元都有一個(gè)唯一的地址
? ? 2)內(nèi)存存儲(chǔ)數(shù)據(jù)是從高地址向地地址分配的
? ? 數(shù)據(jù)有高位和地位
? ? int a =10;
? ? 00000000 00000000 00000001 00001010
? ? 高? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 低
? ? 一個(gè)整數(shù)的各個(gè)字節(jié)存放的順序:地位存放低地址? 高位存放高地址
? ? 3)變量在內(nèi)存中最小的那個(gè)地址,是變量的首地址
?
四: 變量的修飾符:
? ? 1)改變變量的存儲(chǔ)空間
? ? short ? 2個(gè)字節(jié) ? -2^15 ~ 2^15-1;
? ? int ? ? 4
? ? long? ? 8
? ? long long 8
?
? ? 2)改變變量的符號(hào)
? ? signed ? 有符號(hào)數(shù)(默認(rèn)的時(shí)有符號(hào)的)
? ? unsigned 無(wú)符號(hào)數(shù)
五://注意:char型的常量和變量存儲(chǔ)方式是有差別的
? ? char c ='a'; ? ? //97 ? ? 1個(gè)字節(jié) -128,127
? ? int size = sizeof(c); ? ? //1
? ? //在C語(yǔ)言中char的常量會(huì)被當(dāng)做整形數(shù)據(jù)存儲(chǔ)
? ? size = sizeof('a');
? ? printf("%d\n",size);
? ? //1、存儲(chǔ)的原理,取出字符對(duì)應(yīng)的ascii碼值,轉(zhuǎn)換成2進(jìn)制,存儲(chǔ)到一個(gè)字節(jié)中
? ? char ch='A';? //65 ? ? 01000001
? ? //以字符型的形式取出來(lái):內(nèi)存存的是65,到ascii碼表中查找ascii碼值等于65的字符 ? 找到這個(gè)字符取出來(lái)
? ? printf("%c\n",ch);
?
轉(zhuǎn)載于:https://www.cnblogs.com/-boy/p/4031816.html
總結(jié)
- 上一篇: U3D打apk包的常见错误
- 下一篇: EasyUI中datagrid的行编辑模