c語言j
❶ c語言中j=j<<i;怎麼理解啊也就是<<這個符號怎麼理解
「<<」代表左移運算符(就相當於'shl')。該運算符為雙目運算符,結合方向為從左到右,作用是把一個整型數的所有位向左移動指定的位數,移動到左邊界之外的多餘二進制位會被丟棄,並從右邊界移入0。
左移運算的兩個操作數應為整數類型。第一個操作數是要進行移位操作的數,第二個操作數指定第一個操作數移動的位數。如果第二個操作數等於0則不發生任何移位。
應用舉例:
一,問:計算表達式14 << 2的值。
答:表達式14 << 2的值為56,因為14(即二進制的00001110)向左移兩位等於56(即二進制的00111000)。
二,問: 計算表達式8 >> 2的值。
答:表達式8 >> 2的值為2,因為8(即二進制的00001000)向右移兩位等於2(即二進制的00000010)。
摘自:網路
❷ c語言中J+=2是什麼意思
J+=2也就是相當於這樣的J=J+2。。就是先讓J的值加上2,再把它賦給J,如果原先J是2的話,那麼執行完J+=2之後,J的值就是4了 還有類似的a- =3,同樣,就是相當於a=a-3
❸ C語言中*=j什麼意思
a[j]=!a[j]在c語言中意思是給a[j]賦與其相反的真假值。例如,如果a[j]=1,那!a[j]=0,賦值後,a[j]=0,如果,a[j]=0,那!a[j]=1,賦值語句後,a[j]=1。
「!」(邏輯非)邏輯運算符。是指本來值的反值。" !0" 這個邏輯表達式的值為1。(判斷的這個數為0,成立,則其表達式的值為1)。" !1" 這個邏輯表達式的值為0。(判斷的這個數非0,不成立,則其表達式的值為0)。
(3)c語言j擴展閱讀:
邏輯運算用來判斷一件事情是「對」的還是「錯」的,或者說是「成立」還是「不成立」,判斷的結果是二值的,即沒有「可能是」或者「可能不是」,這個「可能」的用法是一個模糊概念。
在計算機裡面進行的是二進制運算,邏輯判斷的結果只有二個值,稱這二個值為「邏輯值」,用數的符號表示就是「1」和「0」。其中「1」表示該邏輯運算的結果是「成立」的,如果一個邏輯運算式的結果為「0」,那麼這個邏輯運算式表達的內容「不成立「。
❹ C語言問題: j=*i j=&i j=*&i 三者有何區別
j=*i;//說明j是普通變數,i是指針變數,意思是把i指向的變數中的值賦值給j
j=&i//說明j是指針變數,i是普通變數,取i的地址然後賦值給j,這樣j就指向i了
j=*&i//你得先確定*和&的優先順序和結合性,*&i等價於*(&i),也就是先取i的地址,然後求這個地址所指向的內容,其實就是i,所以這里,j和i都是普通變數,此等式的含義就是把i的值賦值給j
❺ c語言表達式(j=3,j++)是什麼意思
j++是j自增,不參與表達式的計算。
而++j則是將j先自增後再參與表達式計算。
如表達式(++j)+j
如開開始j=3,那麼先自增1,j=4,並且後面的j也按4算
表達式的值為8
給你看個詳細的別人的解釋:
1.對++j的處理分兩種情況,一種是在表達式進行運算之前就將++j計算,然後再進行表達式運算;第二種是在表達式運算的過程當中進行++j自增並計算表達式的值。
2.兩種情況對j++的處理方式一樣,都是表達式運算完成後自增,所以j++對表達式的運算無影響。
第一種情況:
就TC來說,他是第一種,先把++j進行自增,然後再進行加法運算,而不管++j出現的順序,比如:
m+=(j++)+(++j)+(j++);
有一個++j,所以先將j自增一次,假設j = 2,自增一次後為3,最後的運算就是:
m += 3 + 3 + 3;
而不是
m += 2 + 3 + 4, 雖然結果都是m += 9
你試著把他們的順序換一下:
m+=(j++)+(j++)+(++j);
++j換到了後面,結果仍然是3+3+3,而不是2+2+3,
再如:
m+=(j++)+(++j)+(j++)+(++j);
++j出現了2次,那麼先將j自增兩次,為4,表達等價於:
m+= 4 + 4 + 4 + 4;
而不是
m+=2+3+2+3;
看下這個表達式的匯編:
1 inc si ;自增j
2 inc si
3 mov ax,si ;加法運算
4 add ax,si
5 add ax,si
6 add ax,si
7 add di,ax
8 inc si ;自增j
9 inc si
第1行和第2行是將++j自增,3到7行是加法運算。8、9行是j++的自增,不參與表達式的運算。
所以使用這種編譯方式的編譯器,++j的位置對結果無影響。
第二種情況:
VC、dev c,好像gcc也是這種情況,他是在運算過程中對++j進行運算。所以++j的位置對結果有影響。
其中VC的還比較奇特,比如
m=(j++)+(++j)+(++j)+(j++)+(j++);
的匯編:
mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax ++j;
mov ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
mov edx, DWORD PTR _j$[ebp]
add edx, 1
mov DWORD PTR _j$[ebp], edx ++j;
add ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
mov DWORD PTR _m$[ebp], ecx
結果是
m = 3 + 3 + 4 + 4 + 4 = 18
但是將其中一個++j調換順序:
m=(j++)+(++j)+(j++)+(++j)+(j++);
結果是:
m = 3 + 3 + 3 + 4 + 4 = 17
但是
m = (j++)+(j++)+(++j)+(++j)+(j++)+(j++);
結果卻是
m = 2 + 2 + 3 + 4 + 4 + 4 = 19
就是說前面兩個在第二個++j之前都提前進行了++j,而第三個表達式沒有。
總之比較奇特,跟VC編譯器代碼優化什麼的有關系。而且你將VC6的編譯改成release,上面第三個表達式的結果就是
m = 4 + 4 + 4 + 4 + 4 + 4 = 24,不是19了!
❻ C語言中k*=j是什麼意思
你說的是這個么:
k= --j;等價於j=j-1,之後再把j的值賦給k;
列:main()
{int j=6,k;
printf("%d\n",k=--j);
}
輸出5
(其實這里考到了自加與賦值運算以及他們的優先順序
優先順序:自加運算符>賦值運算符。
❼ c語言程序;j--和--j有什麼區別
單獨使用沒有區別,但如果在表達式中出現有區別。
j-- 出現在表達式中時,j 會以當前值參與表達式運算中,最後才自減1.
--j 出現在表達式中時,j 會先自減1,然後以減1後的值參與到表達式運算中。
++ 也如此。
例如:
j = 3;
i = --j; // i 的值為 2, j 為2
// i = j--; // i 為3, j 為2
❽ C語言中的--j,是什麼意思
j減去1,與j--不同在於,前者當前運算時已經減一,而後者是當前運算沒有減
j = 2
a = --j;// a = 1
b = j--;// b = 1,前面j已經為1,當前的j--事後生效
❾ 在C語言中j---j等於多少
引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。
%f:輸入輸出為浮點型
雖然不存在局部變數的被動銷毀問題,可對於這種情況(返回函數內部new分配內存的引用),