求助c語言問題,求助一個c語言問題

2022-08-27 20:35:42 字數 5516 閱讀 8061

1樓:匿名使用者

樓上在說啥呢,char i = 2 就是把數字 2 放到 i 裡了,如果你真要以字元的形式列印 i,得到的就是 ascii 碼錶上你說的某個字元,並不是 '2'。

這樣的寫法其實也是把 i 當作一個 int 來用,只是範圍小了很多(-128~127),不太常見,但會出現在一些對記憶體資源比較敏感的場景,因為 char 的記憶體佔用比 int 小。

如果是電腦程式就不用太考慮這個寫法了,該整型整型,寫微控制器倒是挺常見的。

2樓:夏天的小紅花

不是這樣的,你剛好說錯了。char c=2;

這是把一個int 值 2,強制轉換成char 值'\2',然後賦值給變數c。

3樓:最大的寶寶

char i = 2;

char ii = '2';

這是兩個不同的字元。i代表一個輸出時不可見的字元,它的ascii值是2;ii代表數字2的字元,它的ascii值是50。

又如char c0 = '2', c1 = '3';

則 c1 - c0 = '3' - '2' = 51 - 50 = 1,

c0 + 1 = '2' + 1 = 50 + 1 = 51 = '3' = c1

這裡寫了一堆,但顯然知道兩個char值之間的間隔就可以得到運算結果了(比如在ascii表中'3'緊跟在'2'的後面),並不需要實際的ascii值。

總結一下,char變數裡儲存的是一個整數值,採用與整數相同的運算規則。char相當於整數的一個真子集。至於它如何在printf時變成我們看得見的字元,那是作業系統的事情

求助一個c語言問題?

4樓:考驕

你在看看,還是不對,全1表示的是-1,

1000...才表示-128

反碼概念,符號位不變,其他位取反(+1),全1反過來就全0,表示0的話就2個0了,所以負數在加個1

只有反碼才這樣

5樓:金半田

二進位制11111111代表-127,是按原碼規則來算。若按補碼規則,二進位制11111111算出來是-1。

文中說的是10000000代表-128。

詳細描述如下:

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

計算機將第1位作為符號位,0表示正數,1表示負數。

原碼:原碼很好理解,第1位是符號位,其餘位表示數值。

反碼:(1)正數:正數反碼是其本身。

(2)負數:去掉原碼符號位,其餘位按位取反。

補碼:(1)正數:正數補碼是其本身。

(2)負數:在反碼基礎上加1。

由上述定義可知:

[+0] = [00000000]原 = [00000000]反 = [00000000]補

[-0] = [10000000]原 = [11111111]反 = [00000000]補

既然+0和-0的補碼一致,所以只需保留一個(+0和-0原碼不同,注意看符號位)。

這樣一來,「[-0] = [10000000]原」相當於沒有使用,於是規定:「[10000000]」為-128。

既然是「規定」,就不能按原碼、反碼、補碼的規則計算了。設計計算機時就在硬體中設定為:10000000代表-128。

之所以引入補碼,是為了消除減法,用加負數來替代減法運算,這樣讓cpu設計更簡單。

6樓:自我程式設計

這裡說的是補碼,不是二進位制負數。

二進位制負數10000001到11111111表示-1到-127,而10000000表示的就是最小負數-128。

而負數在計算機中是以補碼儲存的。

負數->(原碼按位取反)反碼->補碼(反碼+1)。所以-1到-127的補碼就變成11111111到10000001。而0的原碼補碼還是0,-128的補碼是10000000。

所以如上題說的,-128~-1計時10000000~11111111。

7樓:

負數的補碼等於反碼+1

8樓:沙裡波特

二進位制11111111不是代表-127嗎?

--是的。 11111111 是-127的原碼。

為什麼是-128 呢?

--誰說的? 騙你的。

求解c語言的一個問題~ 20

9樓:du知道君

void fun(int x) main()

求助一個c語言問題

求助一個c語言問題 為什麼在vc中老是提示我 warning c4101: 'c' : unreferenced local variable

10樓:墨染

警告的意思為:警告c4101:'e':

未引用的區域性變數原因是區域性變數的錯誤使用。你的 f,c,k都是在main()函式裡面定義的,然而,你在使用這些變數時是在temp()函式裡面,在某個函式裡面定義的變數只能在此函式中使用,所以你會產生錯誤。解決辦法為,將這些變數定義為全域性變數。

問題成功解決。

拓展資料在電腦科學中,區域性變數是擁有區域性作用域的變數。這樣的變數只能由宣告它的函式或塊中訪問。在僅有兩層可見性的程式設計語言中,區域性變數對應全域性變數;另一方面,許多類algol語言允許任意多層的巢狀函式,各自擁有私有變數、函式、常量和型別。

大多數程式設計語言中,區域性變數是直接儲存在呼叫堆疊上的自動變數。即遞迴函式呼叫自己時,區域性變數的每一份例項都在不同的地址空間中。於是在當前作用域對變數的宣告、寫入、讀取都不會在其被宣告的函式外產生***。

11樓:匿名使用者

你定義的f c k的作用域是在main函式之中如果你要用的話請把定義移到main函式前讓他成為全域性變數

12樓:小呆小呆

main函式中定義的變數c k f,屬於區域性變數,作用範圍在main函式內部。你的main函式內部只定義了c k f變數,而沒有使用這三個變數。所以系統報警。

unreferenced local variable就是指你定義了變數卻沒有使用它們。

13樓:匿名使用者

定義錯了,你的三個變數都 是定義在主函式裡,使用卻在temp函式裡。

或者你可以把這三個變數的定義移到main函式的前面,就沒問題了

14樓:無敵神罡

我也是新手,用的指標親測可用。

#include

#define az 1.8

#define bz 273.16

#define cz 32.0

void temp(float *);

void main()

void temp(float *f)

else

printf("done\n");}

15樓:

我也是新手。寫的不好請多指教。

unreferenced local variable 是未使用定義的變數,就是你定義了但是沒有使用。

你的變數都定義在主函式裡面了。temp裡面用到應該定義在temp裡面。函式沒用到的就不用定義了。

還有,main裡面你要求輸入了f的值,temp裡面又輸入一次?隨便在一個函式裡面輸入就行了。2次沒意義。

還有,如果你程式是用while就是無限迴圈了。要break退出吧?而且存在兩種情況(大於-169.4)用if和else比較好吧。

我再你的基礎上修改了一下。你看看對不對?

#include

#define az 1.8

#define bz 273.16

#define cz 32.0

void temp();

void main()

void temp()

else printf("done\n");}

求助一個c語言的問題。 10

16樓:匿名使用者

**50

瀉藥。人在茅房,剛剛夾斷。圈內人多,匿了。

你一個函式一個函式慢慢寫。都是比較初級的函式,有什麼不懂的可以問我

17樓:三天打魚

不復雜 不過用手機不方便寫**

你可以學一下陣列 定義函式 迴圈語句 流程控制 控制檯輸入輸出然後自己寫一寫看 如果在寫的過程中遇到問題再來提問 否則就算別人做了 你也不會

多寫**提高自己解決問題的能力

緊急求助,一個c語言的問題

18樓:匿名使用者

在16位編譯環境中輸出結果是:

u=fffb,u=65531,ch=a,k=97在32位編譯環境中輸出結果則會是

u=fffffffb,u=4294967291,ch=a,k=97同一個值,作為帶符號數和無符號數,輸出會不同;

不同型別的變數,由於其有效的位長不同(例如char型是8位,比int或unsigned int的有效位數少),產生型別轉換時會丟棄部分資料。

以16位環境為例,int或unsigned int在16位環境下預設的位長是16位,所以帶符號整數-5實際儲存是二進位制的 1111111111111101,即16進位制的 0xfffb,賦值給無符號數u其內容也是這個0xfffb,在printf中的格式字串%x會將第一個引數u作為16進位制數值輸出,所以輸出是0xfffb,而格式字串%u作為10進位制的無符號數輸出,就會輸出該值對應的10進位制無符號數值65531了。

int j 初值 0x9961,經 ch=j 後,因ch是字元型,有效位數是8位,所以賦值時會將高位的0x99捨棄,實際ch的數值是0x61,用格式字串%c作為字元輸出,就是小寫字母a;而k=ch時,因為char ch的有效位只有8位,而int k的有效位數應該是16位(對16位環境來說),因此賦值時會將k的高8位用0填充,即,k=0x0061,用格式字串%d作為10進位制帶符號數輸出,就是97了。

19樓:弓月彈流星

結果u=fffffffb,u=4294967291,ch=a,k=97

-5的補碼是的意思是輸出十六進位制數,上面的換成十六進位制就是fffffffb

u=%u是輸出無符號十進位制整數fffffffb換成無符號整數就是4294967291

下面的同理,不過把int賦給char時會超過char的範圍,產生擷取現象,擷取0x9961的後兩位0x0061轉換為十進位制數就是97轉換為字元就是a

求助c語言問題

20樓:汝河金採珊

第一次讀入的'1'不等於'0',迴圈結束,共迴圈0次

21樓:lee也夏天

可以考慮下用正規表示式做

c語言問題求助,C語言問題求助

include void sort int p1,int p2,int p3 else if p1 p3 else else if p2 p3 if p1 看下函式形參和實參的概念。include main void sort int p1,int p2,int p3 少括號 else 少括號 el...

C語言求助,c語言求助 !急!!!

inti 5,n,m,x printf d,d m i,i i加一後再賦給m return 0 結果是6,5 結果應該是6,6inti 5,n,m,x printf d,d i,m i 先輸出i,再將i加一賦給m return 0 結果是6,6 結果應該是5,6inti 5,n,m,x m i pr...

c語言 求助,c語言題 求助

因為要從鍵盤輸入,如果時選擇的話,就不用了,用if else就不用了。因為鍵盤輸入是字元型!上面的大哥說的不錯我佔。c語言題 求助 這道題中n的最大取值為10 所以直接遍歷依次判斷再求和會超時。注意到1 n所有數的和容易求得,為sum n n 1 2 可以採用容斥原理,即先求出總體的和sum 減去其...