2017-09-20 117 views
0

我正在學習整數溢出和下溢,並想知道是否有可能通過給出負輸入n來控制j的值?整數溢出/下溢

int i = n; 
size_t j = i; 
printf("%lu",j); 

例如,如果我想「J」的數值是255,是有可能工藝的負數「n」來給我輸出?

+3

是的!您可以將'n'設置爲255.:-P –

+0

「整數下溢」不存在。在普遍接受的術語中,「下溢」只能發生在浮點算術中。作爲你的問題,答案很簡單:只需將你的'n'設置爲'255'。答案的簡單和瑣碎讓人懷疑你錯過了你的問題。 – AnT

+1

對不起,我的意思是給予負值。我已更新問題 –

回答

1

我想你要找的是什麼

signed char i = -1; 
unsigned char j = i; 
printf("%u\n", j); 

在8位,有符號數-1「環繞」無符號價值255

你問到size_t,因爲是它是一個無符號類型,但通常是32甚至64位。在這些尺寸中,數字255在有符號和無符號變體中都是可表示的(並且具有相同的表示形式),所以不存在對應於255的負數。但是,您當然可以看到類似的效果,並使用不同的值。例如,在具有32位整數的機器上,此代碼:

unsigned int i = 4294967041; 
int j = i; 
printf("%d\n", j); 

很可能會打印-255。這個值是因爲2^32 - 255 = 4294967041。

+0

在後面的代碼中,行爲是實現定義的(並且可能會引發一個信號) –