C語言unsigned賦負值後以整型輸出還是賦值。為什麼

2021-04-08 23:57:56 字數 742 閱讀 2117

1樓:傅螺六秀英

不是int存不下

而是你的棧空間不足

20萬就是200000*4=800000

需要800k左右的記憶體。

明顯棧溢位了

修改方法也很簡單

要麼用new動態分配

要麼定義成全域性變數

比如const unsigned int arrsize = 200000;

const unsigned int nstart = 10000;

const unsigned int nend = 99900;

int a[arrsize];

int main()

2樓:萊牧駱冬雁

輸出的時候型別是由

printf

的格式串指定的:

看看這個執行的結果你就明白:

intmain()

3樓:扶明軒轅懋

unsigned

定義的型別並不改變值在記憶體中的形式,這你要控制輸出為無符號型的,就像是我們如果定義一個char型別的,輸出如果用%d的話,那麼顯示的還是數字而不是字元。如果要輸出無符號型別的話,**u,如printf("%u",n);長整型的是%lu

,所以unsigned只是你希望定義的那個是無符號整型,但是輸出語句還是按照它的理解來翻譯,這就造成了一些小小的問題

就是要不要顯示符號,只在於你輸出的時候控制,而不在於你定義的時候如何定義。

C中給無符號型別賦了個負值的後果

在記憶體長度上沒有溢位的情況下,比如u和u2都是4個位元組,以及有符號整數也是4個位元組,這時候將原資料按照位模式逐位拷貝到目的變數。比如例子中的 32,在記憶體裡這個數的十六進位制表示為 0xffffffe0。將這個十六進位制數逐位拷貝到一個無符號整數變數的記憶體空間後,列印出來就是你看到的結果。...

c語言中unsigned不應該是無符號數嗎?為什麼還是

顯示成有符號還是無符號,是根據printf的格式化引數來決定的。d是按照有符號輸出,u是按照無符號輸出。c語言中不是unsigned int不能表示負數嗎?unsigned表示無符號型,無符號型只能表示正值,不能表示負值。c語言unsigned賦負值後以整型輸出還是賦值。為什麼?不是int存不下 而...

c語言中怎麼給陣列賦隨機值,C語言中怎麼給陣列賦隨機值

看 include include include define n 9 void main for i 0 i 這裡注意一下rand 需要生成資料的範圍公式,即 範圍在 a,b 寫成 a i a rand b a 你只定義不賦值,像是int a 10 它裡面的數字就是隨機的,如果有規定範圍,就要像...