C言語を1週間前に学習し始めたばかりで早速「符号あり/なし」の違いのところで躓きました。そもそもビットって結局何のためにある単位なのでしょうか…状態です。
数弱なのでこういう自分が知らない面倒でややこしい基礎から今まで24年間逃げ回っていたわけですが、今度こそ逃げないぞ、ということで…
以下、ウェブサイトで見ながら学んだことを随時更新していきます。
ビットの大きさが違うと何が違うのか
ビット数の違い≒処理速度の違い、です。
nビットの時に2ⁿ通りの状態を表すことができます。
https://programming.pc-note.net/c/bit.html#:~:text=C%E8%A8%80%E8%AA%9E%E3%81%A7%E6%9C%80%E3%82%82%E3%82%B5%E3%82%A4%E3%82%BA,%E3%81%AE%E3%80%8C1%E3%83%90%E3%82%A4%E3%83%88%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&text=1%E3%83%90%E3%82%A4%E3%83%88%E3%81%AF256%E9%80%9A%E3%82%8A,%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E8%A1%A8%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82
n進数
2進数:1桁で2通り、2桁で4通り、3桁で8通りの数を表せる。
8進数:1桁で8通り、2桁で64通り、3桁で512通りの数を表せる。
C言語と8進数
C言語は12バイト=1ビットという時代を経ているので、8進数表記を標準でサポートしています。
各桁、0~7までの数を使って表すので10進数と区別がつかないため、
先頭を「0」にした数字の並びを8進数として扱います。
https://af-e.net/c-language-octal/
16進数
現在のコンピュータは4バイトをひと単位として使うことが多い(int型も4バイト)。
16進数は4ビットを1桁で表し、4バイトは4*8=32ビット。
つまり8桁で4バイトを表せる。
https://www.cc.kyoto-su.ac.jp/~yamada/programming/bit.html#:~:text=%E3%81%97%E3%81%8B%E3%81%97%EF%BC%91%EF%BC%96%E9%80%B2%E6%95%B0%E3%81%A0%E3%81%A8,%E3%81%A7%E8%A1%A8%E3%81%9B%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E3%81%AA%E3%82%8B%EF%BC%8E
16進数をC言語で10進数として出力する
以下。16進数は「0x」を頭に付けてください。
#include<stdio.h>
#include<stdint.h>
int main(void)
{
int x = 0xA0;
printf("%d\n", x);
}
出力のデフォルトは10進数なのでそのままでよし。
C言語とビット
型(char,int,long int)によって確保できるデータの大きさが決まります。
https://chokuto.ifdef.jp/urawaza/datatype.html
C言語の「signed(符号あり)」「unsigned(符号なし)」何が違うのか
- signed(符号あり):マイナスの値を取り扱うことができます。
- unsigned(符号なし):0からプラスの値しかとれません。