1. 程式人生 > >無符號數相減問題 C語言

無符號數相減問題 C語言

int main()
{
    unsigned int a=50;
    unsigned int b=100;
    printf("%u",a-b);
    return 0;
}

結果是4294967246

為什麼呢?

實際上  CPU裡只有加法器  沒有減法器   做a-b運算時,實際上是做了a+(~b)

因為計算機運算採用補碼運算

a-b=a[補碼]+(-b)[補碼]

50的二進位制是:               00000000|00000000|00000000|00110010
100的二進位制是:           00000000|00000000|00000000|01100100

50的補碼是                      00000000|00000000|00000000|00110010

-100的補碼是                   11111111|11111111|11111111|10011100

補碼相加得到的結果是           11111111|11111111|11111111|11001110=4294967246

由於a-b得到的是無符號整形,所以原碼與補碼相等  結果自然為4294967246

相關推薦

符號問題 C語言

int main() { unsigned int a=50; unsigned int b=100; printf("%u",a-b); return 0; } 結果

警惕邏輯表示式中的符號型別運算(C語言型別轉換)

今天在處理邏輯表示式時遇到了類似以下程式的問題。if( strlen(tmp)-10 <0)這個條件怎麼都進不去。經過VS除錯可發現printf("%d",b-10<0);列印的結果為0。 #include<stdio.h> #include<

C語言中 有符號符號、整數溢出 (轉)

alt 原因 () tar sig 重新 detail copyto 想象 [cpp] view plain copy print? #include<stdio.h> void main() { int l=-1; unsigned

C語言符號和有符號相加比較的問題

轉自https://blog.csdn.net/supreme42/article/details/6687781 看個題: #include<stdio.h> int main() { unsigned int a=6; int b=-20; printf("%d\n"

C語言中有符號符號相加

執行以下這段程式,輸出的結果是什麼? #include <stdio.h> int main() {     unsigned int a = 1;     signed int b = -2;     printf("%d\n", a + b);     p

C語言系列(二)有符號符號詳解

1、你自已決定是否需要有正負: 就像我們必須決定某個量使用整數還是實數,使用多大的範圍數一樣,我們必須自已決定某個量是否需要正負。如果這個量不會有負值,那麼我們可以定它為帶正負的型別。 在計算機中,可以區分正負的型別,稱為有符型別(signed),無正負的型

符號符號------c++程序設計原理與實踐(進階篇)

效果 進階 str 二進制位 bsp () 都是 有符號 重新 有符號數與無符號數的程序設計原則: 當需要表示數值時,使用有符號數(如 int)。 當需要表示位集合時,使用無符號數(如unsigned int)。 有符號數和無符號數混合運算有可能會帶來災難性的後果。例如

C - 有符號符號擴充套件

C語言標準要求先進行資料大小的轉換,之後再進行無符號和有符號之間的轉換. C語言中的強制型別轉換保持二進位制位值不變,只是改變解釋位的方式。 將無符號數轉換為更大的資料型別時, 只需簡單地在開頭新增0,這種運算稱為0擴充套件。將有符號數轉換為更大的資料型別需要執行符號擴充套件,規則是將符號位擴充

符號計算非零位元數量的多種版本C程式碼彙總

         本文首先基於http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html這篇博文,並在此基礎上增加了一個方法。 問題描述 任意給定一個32位無符號整數n,求n的二進位制表示中1的個數,

深入淺出據結構C語言版(9)——多重表(廣義表)

不同 滿足 大學 logs 維數 我會 明顯 http 多維   在深入淺出數據結構系列前面的文章中,我們一直在討論的表其實是“線性表”,其形式如下:   由a1,a2,a3,……a(n-1)個元素組成的序列,其中每一個元素ai(0<i<n)都是一個“原子”,“

深入淺出據結構C語言版(12)——從二分查找到二叉樹

額外 最終 匹配 應對 點數據 隨機數 普通 釋放 三種   在很多有關數據結構和算法的書籍或文章中,作者往往是介紹完了什麽是樹後就直入主題的談什麽是二叉樹balabala的。但我今天決定不按這個套路來。我個人覺得,一個東西或者說一種技術存在總該有一定的道理,不是能解決某個

深入淺出據結構C語言版(14)——散列表

type unsigned size 表示 發現 blog 情況 減少 orb   我們知道,由於二叉樹的特性(完美情況下每次比較可以排除一半數據),對其進行查找算是比較快的了,時間復雜度為O(logN)。但是,是否存在支持時間復雜度為常數級別的查找的數據結構呢?答案是存在

深入淺出據結構C語言版(15)——優先隊列(堆)

turn github png 操作 pri 整數 過程 不難 nbsp   在普通隊列中,元素出隊的順序是由元素入隊時間決定的,也就是誰先入隊,誰先出隊。但是有時候我們希望有這樣的一個隊列:誰先入隊不重要,重要的是誰的“優先級高”,優先級越高越先出隊。這樣的數據結構我們稱

深入淺出據結構C語言版(19)——堆排序

-- 解決辦法 訪問 nsf 可能 bre 操作 數據塊 src   在介紹優先隊列的博文中,我們提到了數據結構二叉堆,並且說明了二叉堆的一個特殊用途——排序,同時給出了其時間復雜度O(N*logN)。這個時間界是目前我們看到最好的(使用Sedgewick序列的希爾排序時間

符號符號在一起如何處理的

有符號數 無符號數 “當表達式中存在有符號類型和無符號類型時,默認情況下計算的結果將轉化為無符號類型”而對於計算機過程而言,變量本身轉化為有符號還是無符號數,都不會改變在計算機中存儲的位狀態。也就是說有符號和無符號數在計算機中都是以補碼形式存在。舉例:#include <stdio.h>

深入淺出據結構C語言版(22)——排序決策樹與桶式排序

不改變 自然 只需要 都是 變種 限定 style buck oid   在(17)中我們對排序算法進行了簡單的分析,並得出了兩個結論:   1.只進行相鄰元素交換的排序算法時間復雜度為O(N2)   2.要想時間復雜度低於O(N2),算法必須進行遠距離的元素交換     

據結構C語言版-隊列

tdi out size != name thead h+ clas def #include <stdlib.h> #include <stdio.h> #include <iostream> using namespac

據結構(C語言版)》學習——day1,初識據結構

數據結構1. 什麽是數據結構 一般而言,使用計算機解決一個具體的問題時,大致需要經過以下幾個步驟:① 從具體的問題中抽象出一個適當的數學模型;② 設計一個求解該數學模型的算法;③ 編寫程序,進行測試、調整,直至得到最終的問題解答。 對實際問題建立數學模型的實質是:分析問題,並從中提取操作的對象,並

代寫據結構C語言代寫、代寫順序表、鏈表C/C++編程作業、代寫C/C++Data Structures、代寫R語言編程作業

which atom stl boolean add debug buffer lean word COMP20003 Algorithms and Data StructuresSecond (Spring) Semester 2018[Assignment 1]Olym

jchdl - GSL實例 - Mul(符號的乘法)

結果 rda .cn long pap back opera letter 使用 這裏實現最原始的陣列乘法,逐位相乘然後加到一起。 參考鏈接 https://github.com/wjcdx/jchdl/blob/edcc3e098d4f1cb21677e86e