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