1樓:匿名使用者
位域結構正如一樓所說,不贅述。
至於答案前兩個一定是1 -1
對於t.c依編譯器不同會有不同結果,比如在我機器上執行就是-1。
原因如下:
因為int是有符號整型,所以它有符號位的,也就是說a和b,實際只能存乙個二進位制位,另外乙個是它的符號位。而c呢,只能表示正負,1就是負,0就是正。
t.a=1相當於使第0位和第1位分別為01t.b=3相當於使第2位和第3位分別為11t.c=1相當於使第4位為1
輸出結果,
t.a,第0位是0所以正數,輸出1
t.b,第2位是1所以負數,輸出-1
t.c,第4位為1,這就要看編譯器怎麼處理了,如果把它當成符號位,那就輸出-1,如果認為沒有符號位,那就輸出1
如果想達到你現在程式的目的,型別不應使用int而應使用unsigned int,即無符號整型。
2樓:匿名使用者
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為「位域」或「位段」。
所謂「位域」是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位數。每個域有乙個網域名稱,允許在程式中按網域名稱進行操作。這樣就可以把幾個不同的物件用乙個位元組的二進位制位域來表示。
說明test型別,共佔兩個位元組。其中位域a佔2位,位域b佔2位,位域c佔1位,其餘11位空著.
int a:2是什麼意思
就是說a只佔兩個bit.乙個位元組為8個bit,a只有最右邊兩個bit儲存資料.如 000000aa
int a = (1,2) 是什麼意思
3樓:匿名使用者
逗號表示式是用小括號括起來的幾個表示式(或語句),其間用逗號分隔,整個逗號表示式中,所有表示式都會計算,但整個表示式取值是最後乙個的結果
因此,int a=(1,2);結果是給變數a賦值2
4樓:大衍之
括號內是逗號表示式,逗號表示式的的值取逗號最右邊的數,也就是2,那麼回a=2,這裡注意優先順序答的問題,括號優先順序最高,賦值=號次之,逗號運算最低,所以如果去掉括號的也就是a=1,2那麼結果就有括號的不同,先計算賦值操作,也就得到a=1,最後的這個式子a=1,2返回的2,但a=1,所以多注意優先順序的問題
5樓:匿名使用者
逗號表示式,括號內依次進行運算,然後將最後乙個值返回
這裡沒有意義,a的值將會是2
int a=-2; printf("%u",a);輸出為:65534. 為什麼?麻煩解釋一下!!謝謝!!
6樓:風若遠去何人留
出現這種情況, 是用的16位編譯器. int佔2位元組.
賦值int a=-2; 補碼形式儲存, 實際儲存為0xfffe用%u輸出, 會轉為無符號數(unsigned int)也就是輸出0xfffe為原碼的正數值, 即65534
7樓:三笑牌拳頭
printf("%u",a)中u是unsigned int的意思,即無符號數,如果你輸printf("%d",a)就會輸出-2了。
int a = -2在記憶體裡以補碼形式表示就是65534,符號數是一種輸出形式,無符號數是另一種輸出形式。
8樓:滬上新視界眼科
整形2在計算機中16二進位制表示為:0000 0000 0000 0010
所以-2用2的補碼表示為:1111 1111 1111 1110
(最高位用0表示正數,用1表示負數,-2即為將2的最高位變為1,將剩餘位數取反,結果數加1,具體參看補碼的表示方法)
由於輸出時採用%u限制格式,用無符號表示,而1111 1111 1111 1110即表示65534(=2^16-2)
(1 0000 0000 0000 0000=1111 1111 1111 1110+1+1)
9樓:葉子草
%u為以無符號十進位制輸出。無符號整數能表示的數範圍是0-65535,即對應的二進位制數0-1111111111111111(16個1)。
int a=-2;a為有符號的整型,以1111111111111111(16個1)的二進位制數儲存。(-2二進位制表示為10000000000000010,負數在計算機中用補碼表示,即1111111111111110)。如果用%d輸出a,則為-2,但是轉換成無符號整數%u輸出,1111111111111110(原來的有符號整數-1)被解釋成1111111111111110(無符號整數65534),輸出結果為65534
10樓:匿名使用者
補碼知道不是什麼東西
如下程式的結果 (要求(j**a)畫圖來解釋) int a = 3, b; b = (a++)+(++a)+(a++)*2+a+(++a);
11樓:
只要你記住++在前邊,就是先把變數值+1之後再計算,把++放後邊,就是先用變數當前的值計算,然後在把該變數值+1,這樣你就應該可以很容易的計算出這個答案了.
b = (a++) +(++a)+(a++)*2+a+(++a)對應的是
b = (3++) 此時先把a的值賦給b,然後a+1,所以a=4,b=3,
b= 3+(++4) 此時a先計算自己到5,所以a=5,b=8
b=8+(5++)*2 此時先計算a*2=10+8,然後a+1,所以 a=6,b=18
b=18+6 ,此時a=b,b=24
b=24+(++6) 此時先把a+1,所以 a=7,b=31
12樓:匿名使用者
a++ 是先執行,再加,++a是先加,再執行,
(a++)還是3 但是當執行到+(++a)的時候就變成了5 後面都是這樣子
13樓:卟別離
3+5+10+6+7=31
int a[2][3] int (*p)[3] = a;
14樓:匿名使用者
p表示首位址,二維陣列實際是一維連續放置,比如也為19*19圍棋棋盤第ij個元素轉為連續放置為19*i+j
15樓:匿名使用者
a[3][2]=,,};
int (*p)[3] = a;(*p)代表的是行bai;則p指標du指向的是函式3個元
zhi素dao(每個元素兩個值)的陣列;專*(p+1)為這個陣列第二屬個元素()的首位址,(*(p+1)+1)為裡的第二個元素,為4。
若有定義:int a[3][4],(*p)[4]=a;要引用a[2][3]用(c)
16樓:匿名使用者
我倒,你這個是選擇題,對吧!看了三遍才看懂題意.
解:int a[3][4]; 定意乙個二維陣列(*p)[4]=a;這裡就是定義p為指向包含4個元素的一維陣列的指標變數,那麼,你試想一下,二維陣列在記憶體中存放的形式是怎麼樣的? a賦給(*p)[4], a就是a[0][0]的位址, a就是指向零行首列位址的,它的趨勢是指向行的,a+1就是指向一行首列的位址,a+2就是指向2行首列的位址,那麼*(a+2)它也是指向2行零列的位址, 它的趨勢是指向列的,那麼*(a+2)+0與*(a+2)是指向同乙個位址,*(a+2)+1就是指向2行1列的位址,*(a+2)+3就是指向2行3列的位址,*(*(a+2)+3)就是a[2][3]
*(p+2)是不是指向二行首行的位址呢? *(p+2)+3是不是指向二行三列的位址呢? 那麼*(*(p+2)+3)就是a[2][3]
17樓:
p是乙個指標陣列, 開始時,p指向a[2][4]的首位址(或者a[0][4]的位址),p+1時,指標前移乙個單位(即前移乙個a[4]大小的位元組),也就是移到a[1][4]的首位址,同理,p+2時,它移到a[2][4]的首址,因為要引用a[2][3]的值,所以取指標值*(p+2),此時*(p+2)是乙個一維陣列,即是a[2][0]行標的那行(把二維陣列看成是個矩陳吧,所以是取a[2]這行),
所以直接(*(p+2))[3]就是a[2][3]的值了,換成指標模式就是*(*(p+2)+3)
不知樓主可看得明白,發覺這個問題文字表達自己表達不出自己想說的!
請高手幫忙解釋下這段程式 int a;a=(int)((double)(3/2)+0.5+(int)1.99*2); printf("%d\n",a);結果為3.
18樓:匿名使用者
int a;
a=(int)((double)(3/2)+0.5+(int)1.99*2);
//(double)(3/2) :是將
**3/2的結果型別轉換為雙精度bai=1.5//(int)1.99 :
是將1.99 強制轉換為整形du=1// 最外面的zhi(int)把裡面的小數都刪除dao 結果 1+0+1*2 所以=3
printf("%d\n",a);
19樓:匿名使用者
簡單分享下吧,
3/2計算的結果是1,因為按整型計算。
(double)1=1.0
1.0+0.5=1.5
(int)1.99=1
所以最終(int)1.5+2=3
20樓:匿名使用者
1:3/2=1強制double也是1
2:(int)1.99=1/*有損*/,1*2=23: 1+0.5+2=3.5 強制int=3am i right?
請解釋int a[10];和 int a[10]={0};有什麼區別?這兩種表達是一樣的嗎
21樓:匿名使用者
不一樣乙個是定義了乙個儲存10個整型變數的陣列,但是沒有初始化,第2個是只初始化了陣列的第乙個元素為0
若有定義:int a[2][3]={2,4,6,8,10,12};則*(&a[0][0]+2*2+1)的值是
22樓:轉身彩虹
答案是bai12,我親自除錯了一下,沒問題的du。zhi
解釋:&a[0][0]表示陣列a的第一dao個元素的位址,陣列元版素儲存在記憶體中一權片連續的區域裡,所以陣列元素的位址加1則指向下一元素位址,多維陣列也是一樣。因此括號裡面的表示式就是a[5](實際上這裡沒有a[5],而是第5+1=6個元素,即a[2][3])的位址,前面再加上乙個*就表示該位址對應儲存單元所儲存的內容了,就是12。
23樓:匿名使用者
12實際上是*(&a[0][0]+5),即陣列a的第6個元素
24樓:匿名使用者
6&a[0][0]+2*2+1=&a[0][0]+5
一般乙個int型數在32位機裡面是4個位元組,正好指到6的初始位址
設有以下定義 int a,設有以下定義 int a 2 3 , p 3 p a 則對a陣列元素的非法引用是( )
a啊!這位出題先生太忽悠人了,你沒有發現表示式中的a是大寫的嗎?沒定義啊 哈哈 int a 2 3 int p a與int a 2 3 int p 3 a 的區別 int p 3 是陣列指標,指向有三個元素的陣列 p a 0 位址 p a 1 位址 int p是整形指標 p a 0 0 位址 p a...
為什麼int a3和int a3不能正確二維陣列
嘿嘿 你這樣定義的話 編譯器無法識別第一位的個數 陳學陽 int a 3 2 這個語句語法是錯的,錯在二維陣列的初始化。初始化值要放在花括號裡。int a 3 二維陣列宣告,其中一維大小不定。陣列的初始化不要求全部元素都賦值,所以 int a 3 初始化 a 0 0 等於6 int a 3 初始化 ...
C 語言 int a是什麼定義啊
與非 是指標變數,簡單來說,指標變數中是儲存的變數地址,而不是變數的值。指標是c語言的精華部分,通過利用指標,我們能很好地利用記憶體資源,使其發揮最大的效率。有了指標技術,我們可以描述複雜的資料結構,對字串的處理可以更靈活,對陣列的處理更方便,使程式的書寫簡潔,高效,清爽。但由於指標對初學者來說,難...