text: 無符號數可以表示特定型別規定範圍內的整數。有符號數能夠表示負數的代價是能夠表示的正數範圍的縮小，因為其約一半的數值範圍要用來表示負數。無符號數可以利用其所佔有的所有位來表示較大的數。例如，16位有符號整數可表示 -32768~32767 之間的任意整數，而16位無符號整數可表示 0~65535 之間的數。若將有符號數轉換為二進位制，則其數值型別允許的最左一位用於表示符號，但在無符號數中，最左一位與其右各位一樣用於表示數值。大多數架構的機器語言不區分有符號數及無符號數。然而算術指令通常設定進位標誌等CPU標誌，為無符號算術及溢位標誌設定。這些標誌能夠被帶入隨後的分支及算術指令中。C語言及大部分C的派生語言為其所有有符號數型別及char型別提供了對應的無符號型別。在這些語言中，若存在顯式的unsigned識別符號，則將此數標識為無符號，否則為有符號，對應地存在signed識別符號用於標識有符號數。為數值新增U字尾也可將此數值標識為無符號數。例如，在32位數中，0xFFFFFFFF表示-1，但0xFFFFFFFFU表示4294967295。編譯器在遇到有符號數與無符號數間的比較、算術等操作時常會發出警告，因為可能因其範圍不同而導致溢位。C/C++語言規定無符號整數運算不存在溢位，如果結果超出了無符號型別能表示的最大數，則做模運算取餘數。例如，對於uint32的 2-3， 其結果對0x10000模運算取餘數，最終結果為0xFFFF。
metadata.dataset: erhwenkuo/wikipedia-zhtw
metadata.title: 無符號數
metadata.url: https://zh.wikipedia.org/wiki?curid=4445571