程式設計必備知識

weixin_33968104發表於2017-10-22

資料型別

資料的輸入和儲存。可以分為

A.基本資料型別(四類八種)

(整形:  int(4個位元組)      短整型short(2個位元組)  長整形long(8個位元組)  位元組byte (1個位元組8位)  )  int:32 位、最常用,-2^31-1~2^31  (21 億)

(浮點型:  單精度浮點數float(4個位元組)  雙精度浮點數double(8個位元組)  )

(字元:  char(在C語言中佔1位 在java c# 中佔2個位元組 )  char 本質就是個數!二進位制的,顯示的時候,經過“處理”顯示為字元。 )

(布林型別:   true   和 false    )

B.引用資料型別

(類,介面,陣列)


變數

(變數的本質是記憶體中一段儲存空間)

IntI; i=5;

i是變數,程式向系統申請了一個記憶體單元,在程式執行中,i的值可以改變,但程式結束後,其所佔的空間不是釋放,而是被系統收回許可權。



進位制


6004169-efe49deb341b9e5f.png


補碼

問題:

一個int型別的變數所能儲存的陣列的範圍是多少?    -2^31~2^31-1

最小負數的二進位制程式碼是多少?1000 0000 0000 0000 0000 0000 0000 0000 

最大正數的二進位制程式碼是多少?0111 1111 1111 1111 1111 1111 1111 1111

已知一個整數的二進位制程式碼求出原始的數字?FFFFFFF5  --->   -11

數字超過最大正數會怎麼樣?例如一個數1位的二進位制是0111 1111(127)+0000 1010(10) = 1000 1001  =》 -119

不同的資料型別相互轉換?char ch = 128      printf("%d",ch)    -127    int->char  0000 0000 0000 0000 0000 0000 1000 0000   代表128  那麼這是char只有8個位元組  所有將int左邊多出的位元組省去  就剩1000 0000  就是 -127


6004169-103d3c8121c4809c.png

原碼:也叫符號  絕對值碼 

      最高位0表示正  1表示負  ,其餘二進位制位是該數字的絕對值的二進位制位(-5(八位的二進位制數)   表示10000101  因為負號是1,5是0000101)

優點:簡單易懂  缺點:加減運算複雜  存在加減乘除四種運算,增加了CPU的複雜度零的表示不唯一(100000000或者0000000)

在計算機中,從未被使用!

-----------------------------------------

反碼:

反碼執行不便,也沒有在計算機中應用

-----------------------------------------

移碼:

移碼錶示數值平移n位,n稱謂移碼量,移碼主要用於浮點數的階碼的儲存

-----------------------------------------

補碼:(在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

A已知十進位制求二進位制

求正整數的二進位制

2取餘,直到商為零,餘數倒序排列

求負整數的二進位制

先求出與該負數相對應的正整數的二進位制程式碼,

然後,將所有位取反末尾加1,不夠位數時,左邊補一

4位元組int-5先求5的二進位制

0000 0000   0000 0000     0000 0000  0000 0101  所有位取反,末尾加1

1111 1111   1111 1111     1111 1111  1111 1011   16進位制:FFFFFFFB

2位元組short int(-3)先求3的二進位制

0000 0000 0000 0011所有位取反,末尾加1

1111 1111 1111 1101     用十六進位制表示:  FFFD

求零的二進位制

全是零(100000000000....這表示最小的負數)

B已知二進位制求十進位制 

如果首位是0,則表明是正整數,

按普通方法來求

如果首位是1,則表明是負整數,

將所有位取反末尾加1,所得數字就是該負數的絕對值

習題:FFFFFFF5 已知二進位制  求其代表的整數是多少?

1111 1111 1111 1111 1111 1111 1111 0101

由於最高位是1,所以最終是負數,先對其所有取反

0000 0000 0000 0000 0000 0000 0000 1010 末尾加1後

0000 0000 0000 0000 0000 0000 0000 1011  該值為11 所以最終結果:-11

位運算子(現實意義,對資料的操作精確到每一位)

提問   如果想讓一個數的第五位為零 要怎麼操作?

int  a   ; a  =   a&1111101111    這樣a的第5位就一定位零  其他位不變。

&  ---按位與(&&邏輯與 也叫並且)&& 與&的含義完全不同(短路運算子一般有:&&、||,其原理是:當有多個表示式時,左邊的表示式值可以確定結果時,就不再繼續運算右邊的表示式的值。)而& 1  不具備短路用途

1&1 = 1               1&0 = 0          0&1 = 0         0&0 = 0            5&7 = 5    21&7 = 5   5&1 = 1    5&10 = 0   

5->00000101    7->00000111             00000101&00000111 = 000000101 

| ---按位或 (||邏輯或 )

1|0 = 1    1|1 = 1    0|1 = 1  0|0 = 0   5|7 = 7    5|3 = 7

~  ---按位取反  (~i   就是把i變數所有的二進位制位取反)

~0101   -》1010

^   ---按位異或(相同為0  不同為1)

1^0 = 1   0^1 = 1  0^0 = 0  1^1 = 0     5^3 = 7

<<  ----按位左移(數向左移動幾位數  補零)  

5>>1 = 50 (相當於乘於10^1次方)    二進位制  0101>>2  010100 (相當於乘於2^2次方)           


6004169-b5cdcc8ecb0f9809.png


>>   ---按位右移()

6004169-df4eafcaeea3bb9b.png

相關文章