⑴ 為什麼c語言的數組下標從0開始而不是從1開始
一種約定。
如果最初約定從1開始 那也沒什麼
至於為什麼會選擇從0開始,最重要的原因 我覺得是方便
對於任意的a[i] 取值的時候 都是等效於*(a+i)
a是數組首地址,這樣訪問第一個元素 *(a+0) 就不需要任何偏移了。
⑵ c語言 為什麼第一個輸出1,2 我看的是0,1 還有第二個 x1不是等於x2嗎 輸
第一個圖:
第一個switch的第一個case後面沒有break,所以做完case 0還會把下面的case 1做一遍
這時a++做了一次,b++做了兩次,就是 1 , 2
第二個圖:
strcmp函數判斷字元串大小,先判斷第一個字元的ACSII碼值,如果相等就判斷第二個
x1 , x2共同的部分判斷都相等,但是x1更長,所以x1>x2輸出一個正數(相等輸出0)
⑶ C語言判斷相等的語句把數字放在前面,例如if(1==len)的作用是什麼
防止由於書寫錯誤而引起的錯誤,比如1=len,書寫的時候少寫了一個等號,則len=1就認為是賦值操作,沒有問題,但是1=len就會報錯了。
⑷ C語言中為什麼用補碼表示負數,而不是直接在正數的前面加1呢
因為一個位元組是八位的。我們總是利用最高位表示符號位,正數的補碼是本身
舉個例子,若正數0111,1111
按照你的意思,直接加1
不就變成10111,1111了嘛
還有,補碼表示負數是因為計算機中的加減運算,對負數都是通過補碼來運算的,通過補碼的加減,得到的補碼再反過來求出對應的負數,計算機中的計算只有0和1
不可能在數字前加正負號,所以負數必須用補碼
⑸ c語言中的i一般是從0開始,還是1開始
具體問題具體分析:
如果對數組進行操作i一般都是從0開始,因為數組的下標是從0開始的;
比如要n的階乘i則需要從1開始,因為0開始,任何數乘以0都等於0.
⑹ C語言中為什麼用補碼表示負數,而不是直接在正數的前面加1呢
因為一個位元組是八位的。我們總是利用最高位表示符號位,正數的補碼是本身
舉個例子,若正數0111,1111
按照你的意思,直接加1
不就變成10111,1111了嘛
還有,補碼表示負數是因為計算機中的加減運算,對負數都是通過補碼來運算的,通過補碼的加減,得到的補碼再反過來求出對應的負數,計算機中的計算只有0和1
不可能在數字前加正負號,所以負數必須用補碼
⑺ c語言為什麼輸出的是1
說起來有點麻煩的,主要是內存調用導致聲明的級別(這里是int)不同;
顯然級別最高的是外部聲明int i=1;(假設級別為1)
而在函數調用裡面只要級別跟它一樣的時候(即不再對i進行再次聲明,像main裡面就對i進行了3次的聲明,級別分別為2,3,4,因為i前面都有int還有代表級別規劃的{}),此時的i==1,顯然funct裡面因為輸出i比int i=5(級別為2)先,所以輸出的是1級別的i,即為i==1.
如果你覺得難理解的話,可以看這個程序:
#include<stdio.h>
void main()
{
int i=2;
{
int i=3;
{
int i=4;
}
}
printf("%d",i);
}它輸出的是2(i的級別為1,2,3)
如果只把int i=3的int去掉,它輸出的是3(i的級別分別是1,1,2);
如果只把int i=4的int去掉,它輸出的是2(i的級別分別是1,2,2);
反正是該死的{}和int作怪,跟i是不是外部變數沒關系,看這個代碼:
#include<stdio.h>
int i=1;
void f()
{
printf("%d\n",i);
int i=5;
}
void main()
{
i=2;//僅將int刪了,使這里i的級別變為1
{
int i=3;
{
int i=4;
}
}
f();//所以它輸出2而不是1
}
⑻ C語言中為什麼用補碼表示負數,而不是直接在正數的前面加1呢
因為一個位元組是八位的.我們總是利用最高位表示符號位,正數的補碼是本身
舉個例子,若正數0111,1111
按照你的意思,直接加1
不就變成10111,1111了嘛
還有,補碼表示負數是因為計算機中的加減運算,對負數都是通過補碼來運算的,通過補碼的加減,得到的補碼再反過來求出對應的負數,計算機中的計算只有0和1
不可能在數字前加正負號,所以負數必須用補碼
⑼ c語言問題:求問為什麼答案第一個是1
應該是:
4,4,4
a>>2相當於a/4(也就是2 的平方)