有一道關於C語言的題,希望大家可以幫助我理解一下

2023-01-19 14:40:20 字數 4196 閱讀 2474

1樓:風中炙炎

因為定義a為無符號型整數,其65535的二進位制表示為1111111111111111,即16個一。而在函式printf中使用%d,即表示以整數的型別輸出,整數型別預設是有符號的,所以將16個位分為一個符號位,和十五個資料位。又因為編碼系統預設符號位為1表示負數,而在計算機編碼中,負數使用補碼錶示,所以1111111111111111被認為是某一負數的補碼,又根據補碼的計算方法計算原始碼(負數符號位不變,資料位取反加1)為1000000000000001,為—1,所以得出如此結果。

如果使用%u,則表示以無符號整數型別輸出,則會輸出65535.

2樓:**紳士

朋友你好,這個題是這樣的,因為unsigned int a的取值範圍為1,2,3······65535,若你程式是那樣的,則執行的結果為65535,而不是-1,若你的程式為:

unsigned int a=65536;

printf("a=%d\n",a);

則結果為:a=1

若你的程式為

unsigned int a=65537;

printf("a=%d\n",a);

則結果為:a=2

不知你體會到沒有,也就是一個圈的意思,若數大於範圍,則它就從最後的那個數向後再推。這個重在意會。希望能幫到你。

3樓:匿名使用者

在輸出的時候unsigned int的65535被轉化為int型,printf("a=%u\n",a);就不會發生這種轉換。

4樓:穎喵喵是討厭鬼

65535 = 0xffff = 11111111 11111111 11111111 11111111 (b)

而-1也是11111111 11111111 11111111 11111111 (b)

所以就輸出-1了。

這關於補碼問題。

5樓:慕冬亮

補碼的事情,你列印用的不是無符號列印,建議用一樓的。

6樓:匿名使用者

試試printf("a=%u\n",a);

一道我不能理解的c語言題,希望大家幫我解答,謝謝

7樓:匿名使用者

選c因為呼叫fun函式相當於是把q這個指標的值傳遞出去,在fun函式中有另一個s指標來接收這個值,但s接收完之後,直接就又被賦了一個新的地址((int*)malloc(sizeof(int))此句又重新申請了一個空間,並把該空間的地址值賦給了s);此時其實,fun裡面的操作與原q已沒什麼關係了,q除了在一開始把自己的值拷貝了一份傳出去後就沒再變過,如此,在最後輸出時,它儲存的還是a的地址,所以是1

8樓:匿名使用者

c 1

首先說函式void fun(int*pl,int*p2,int*s)我們知道,函式傳引數有兩種方式,傳值和傳址。可能理解上比較難,我們說的簡單點,

以一個交換函式為例int swap(int a, int b),不論a, b什麼值,在呼叫以後,都沒法交換,如果想達到交換a,b的目的,就要使用int swap(int * a, int * b),或者int swap(int &a, int &b)(如果想詳細瞭解,隨便搜搜傳值傳址就ok。)。

那麼,想要改變一個指標的值呢(指標的值其實就是它指向的地址)?有了上面的參考,是不是需要用一個指向指標的指標呢?叫做2級指標。

9樓:匿名使用者

c q最初指向變數a的地址,因此*q=1.

之後q作為引數呼叫func,會生成一個q 的副本賦值給s,s的改變不會影響到q值

10樓:匿名使用者

cq指標的值沒變;所以q還是a的地址。

我寫了一道c語言程式設計題,但是出現了我不能理解的bug希望有大佬幫我 看看!!感激!!!

11樓:聽不清啊

要求分別統計出其中英文大寫字母,小寫字母,數字,空格以及其他字元的個數。

是要每一行的統計資料嗎?

12樓:匿名使用者

這一句:

if( str[j][j]>='a' && str[i][j]<='z' )

什麼意思?【str[j][j]】

還有那個

for( i==0; 1<3 ; i++ )額。。。

13樓:匿名使用者

if那裡 你寫了str[j][j] 注意一下

有一道c語言的選擇題,希望能幫忙給出詳細解答,謝謝了

14樓:匿名使用者

struct s

;static struct s a[3]=;

static struct s *ptr;

ptr=&a[1];

第5句相當於

static struct s a[3]=,,};

然後看答案

a.ptr->i++

ptr指向a[1]然後指向屬性i 此時i=2執行完這句時候才執行i++

b.ptr++->i

結構體中沒有i這個屬性

c.*ptr->i

->的優先權大於*指標 所以相當於*(ptr->i)而i屬性是int 不能用*指標去修飾

d.++ptr->i

->的優先權大於++所以相當於++(ptr->i)而使用這句之前使用了i+=1

所以此時a[1]的i=3

所以正確答案是d

15樓:匿名使用者

da = 2

b = 2

c 估計語法應該過不到

16樓:匿名使用者

d.++ptr->i

一道c語言題,我有好多不明白的地方,希望大牛們能指導一下

17樓:

先給你一份自己剛寫的**:

#include

#include

long long ans[10005];

#define mod 1000000007int main()

int t;

scanf("%d", &t);

while (t--)

return 0;

}然後回答你的問題:

1,為什麼不能直接取模

可以直接取,取模是符合交換律的,只要保證取模中途不要溢位就行寫三次取模**很冗餘,不好讀

2,為什麼程式很慢...

因為沒必要每次輸入都重新算一次

可以直接全部算出來所有的答案,存在陣列裡,每次問的時候直接輸出答案就可以

(也就是把你的第二份**裡面的 dabiao 函式放到迴圈外面3,這個題裡面的n好像完全沒用

4,這個問題有更快的解法...超級快...

叫做矩陣快速冪...感興趣可以自己去查資料

18樓:匿名使用者

宿業師山房待丁大不至(孟浩然)

19樓:

初發揚子寄元大校書(韋應物)

一道c語言題目,很難,對我很重要,但是我沒有思路,希望大家幫幫我

20樓:匿名使用者

結構體,連結串列結構,成員包含各類成員資訊。要求裡面寫的夠清楚了

21樓:_qq加

樓主問題解決了嗎 如果沒有,我試試那

你說的這個通訊錄說難也難 說不難也不難

不難是因為都是基礎知識

難 是因為工作量大

22樓:下一頁使用者

多看書、多思考。程式設計的思維方式也是需要鍛鍊的

一道關於c語言的題目,希望有人告訴我我錯哪了,為什麼執行不對?

23樓:匿名使用者

main函式裡第一行 放到main函式前面,即:

int age(int n);

void main()

急急急!一道有關於c語言的程式設計題目,希望懂得可以告訴我。關於結構和呼叫引數這方面的知識。

24樓:

一樓的朋友回答的不錯。很認真。他講的很有道理。

25樓:去吧

看來我的水平也低了點了。學了半年了。題目都看得不太懂

關於c語言的一道題

你的程式應該修改成這樣才能執行 int x 5,y 5 for x y 你寫的是for x y,改正 for x y 逗號改成分號,for語句裡邊的倆分號分別將 初始值 迴圈是否繼續的條件 更改初始值 隔開,你的程式的意思是 初始時候x和y都是5,然後進入for迴圈,因為第一個分號前是空的,所以就直...

一道C語言程式設計題,一道C語言程式設計題

源 只要150行的程式就能用於 抗震救災 一道c語言程式設計題 15 在vc6下除錯通過。include stdio.h main printf 共有 版 d組解 權 n count 一道c語言程式設計題。5 include int s 100 100 定義陣列,第i行存的是第i個學生的成績 int...

一道c語言函式題,一道C語言函式題

原因 i是全域性變數 一步一步來分析這個程式 從main進入 for i 5 i 8 i aa 進入迴圈首先i 5,i 8成立 執行aa 此時i 5 執行下面的迴圈 for i 5 i 8 i printf printf n 列印3個星號一個回車符 然後i的值由於aa中的迴圈變成了8 好了,aa執行...