C言語charとunsigned charの違いに基づいて紹介します。


Cでは、デフォルトの基礎データタイプはすべてsignedであり、今はcharを例にとって、charとunsigned charの違いを説明しています。
まずメモリにおいて、charとunsigned charは、同じバイトであり、唯一の違いは、charの最高位が符号ビットであるため、charは-127~127を表し、unsigned charは符号ビットがないので、0~255を表すことができます。これは分かりやすいです。8 bit、最大256種類の場合、どうしても256個の数字を表します。
実際に使っている過程にはどんな違いがありますか?主に記号のビットですが、普通の割当では、読み書きファイルとネットバイトストリームの違いはあまりありません。とにかくバイトです。最上位は何ですか?最終的な読み取り結果は同じです。ただ、一番高い位置をどう理解しますか?スクリーン上の表示は違っているかもしれません。
両者の最大の違いは、byteを表す時に、unsigned charを使っていることに気付きました。なぜですか?まず、一般的な意味では、byteは符号ビットがないということが分かります。もっと重要なのは、byteの値をint、longなどのデータタイプに付与すると、システムはいくつかの追加的な作業をすることです。charであれば、システムは最上位が符号ビットであり、intは16または32ビットである可能性があり、最上位が拡張されます(注、unsigned intに割り当てられても拡張されます)、unsigned charであれば拡張されません。最高位が0の場合、両者は区別がなく、1の場合は区別があります。同理論は他のタイプを導き出すことができます。例えば、shott、unsigned shotなどです。
具体的には次のような小さい例を通して違いを見てもいいです。
include
void f(unsigned char v){char c=v;unsigned char uc=v;unsigned int a=c,b=uc;int i=c,j=uc;printf(----------------);printf('%c:%c',%c',c,uc);printf("%X:%X,%X",c,uc);printf('%u:%u,%u',a,b);printf("%d:%d,%d",i,j);)
int main(int argc、char*argv[]){f(0 x 80);f(0 x 7 F)return 0;)
結果の出力は以下の通りです。 
結果分析:
0 x 80は、(signed)charに対して、1,000 0000とバイナリで表され、charとしてunsigned intまたはintを割り当てた場合、システムは、最上位が符号ビットであると考え、最上位が拡張される。一方、0 x 7 Fは二進法で0111 1111と表現され、最高位は0であり、拡張されない。
unsigned charにとって、最高位が0であろうと、1であろうと、拡張はしません。