C語言負數轉正數的隱藏缺陷

2021-06-17 00:39:48 字數 334 閱讀 2503

今天在寫程式的時候發現了乙個相當隱蔽的錯誤,查了好久才找到了這個缺陷,就是當我們在將乙個負數變成正數的時候,一定要注意防止資料溢位。比如定義乙個char型的變數a。。。。。。。。如下所示:

char   a;

if (a<0)

a=-a;

printf("%d\n");

這幾條語句在一般情況下是不會出問題的,比如我們使變數a=-10,輸出為10;然而當a=-128時,問題就出現了,此時輸出的仍然是-128(這是我在vc6.0上的測試結果),分析其中的原因才發現char型的資料的取值範圍是-128~+127 所以當a=-128時a=-a;發生了溢位。。。。。。。。。。。。。。。。

C語言負數除以正數,與正數除以負數,正負有誰定呢?

拋磚引玉 c語言負數除以正數,與正數除以負數或者負數除以負數的餘數和商,正負有誰定呢?3 2 3 2 3 2 3 2 3 2 3 2 前提假設假定我們讓 a 除以 b,商為 q,餘數為 r q a b r a b 這裡,不妨假定 b 大於 0。我們希望 a b q r 之間維持怎樣的關係呢?最重的一...

c語言正數與負數相加 C語言資料基本型別 1

1 原碼 乙個數的原碼 原始的二進位製碼 有如下特點 注 原碼表示法簡單易懂,與帶符號數本身轉換方便,只要符號還原即可,但當兩個正數相減或不同符號數相加時,必須比較兩個數哪個絕對值大,才能決定誰減誰,才能確定結果是正還是負,所以原碼不便於加減運算。2 反碼 對於正數,反碼與原碼相同 對於負數,符號位...

c語言負數左移右移 C語言負數的移位運算

在c 中左移也就是所說的邏輯移位,右端補,而右移是算數移位,左端補齊的是最高位 的符號位。故負數左移,有可能變成正數,但負數右移,肯定還是負數。用進製的形式對資料進行賦值 這進製的數代表的是補碼。i 0xfffffff7 0xfffffff7 是補碼,而不是原碼,故 i 9 printf d x n...