分析:char類型數據表示範圍爲-128~+127,所以197遠遠超出了char類型所能表示的範圍,將數據進行取反+1的操作
197的表示爲1100 0101------->0011 1011------>-59(第一位爲符號位,符號爲1位證書,0爲負數)
255的表示爲1111 1111------>0000 0001-------->-1
unsigned char的表示範圍爲0~255,所以e和f都可以表示,g需要進行轉換
-1的表示爲0000 0001------>1111 1111------>255
指針和數組的區別:
1.大小不同
2.指針可以++,數組名不能動
3.訪問方式不同
數組名arr表示整個數組
1.在定義數組的同一個函數中,求sizeof(arr) (表示數組的有些奧長度)
2.在定義數組的同一個函數中,求&arr+1 (表示加上整個數組的長度)
數組的注意事項:1.越界 2.數組作爲參數傳遞,還需要長度 3.以‘/0’結尾
關於指針的運算及數組長度計算:
int arr[10];
p = arr;
p[i] == *(p+i); ,p[-1] == *(p-1)
*(arr+i) == arr[i];
分析:第一個40表示一個int類型4個字節,10個正好是40個字節
而1768956------->1768996增加了40個字節,表示增加了整個數組的長度。
arr[2]表示下標爲2的數字,爲3,p[2]表示爲p[2]==*(arr+2),爲3
*(arr+3)表示首地址向右移動3個位置,下標爲3的數字爲4,*(p+3)==p[3]爲4
NULL表示數組爲空,長度爲4是因爲數組退化爲指針,指針的長度爲4
分析:數組從右向左依次傳入,所以也是從右向左進行運算,當i=1時,右邊p[i++]爲p[2]爲3(後置++,先賦值在進行++,前置++,先++,再進行賦值)*p=&arr[1]則*p爲2,再進行++,則p[3]=4(就近原則,進行運算)
因爲10>5,所以爲真,爲1,又因爲1>3爲假,所以爲0,所以輸出結果爲<
分析:a&&b 兩個都爲真,總體才爲真,所以++a==++b==1,a||b,如果a爲真,則成立,不用運算b,如果a爲假,則對b進行判斷
此時已經知道a爲真,則進行下面的計算,a++和b++後都爲2,對c=0進行c++運算,c==0,c++爲1,所以程序的輸出結果爲2,2,1
分析:因爲在16進制中,一個位表示4個位,左移8位則實際應該是移動16進制中的兩個位數,則變爲了7600,16進制的12位0012,與移動之後的7600進行|(或)運算,則輸出16進制的結果變爲7612