C語言幾道題

分析: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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章