SSブログ

32ビットだったんだ [パソコン]

殆ど鳥見に行けていないので、もう関係ない話を。

最近arduinoを使い始めましたが、色々とわからないことが多いです。 picなら下回りを1から作るのであまり気にしなくて良いこともaruduinoとなるとnetを調べまくらないといけません。

コンピュータのデータのサイズで唯一不変なのはbitという単位で0か1を表します。(ひょっとしたら0,1,2なんてのもあるのかも) バイトも固定だろう!という意見もあるかもしれませんが、私の経験では1バイトが9ビットというのも有りました。 でも、ここでは1バイトを8ビットと言うことにします。

問題は更にその上の単位での話です。 intとかlongとかのサイズ使うcpuによってまちまちなんですね。最初ESP32を使い始めた時はintが2バイト、longが4バイト、float4バイトくらいのつもりで始めたのですが、なんだかいろいろ違うみたい。 調べたら型はこんなに有りました。


char, unsigned char, byte, word, int unsigned int, short, unsigned short, long, unsigned long

float, double, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t

xx_tなんてのは私が普段使わない型で何であるのかよくわかりません。 長さが固定なので良いのですが。

で、それぞれのサイズがわからないのでこんなプログラムを作って確認しました。


    Serial.printf("char: %d\n",sizeof(char));
    Serial.printf("byte: %d\n",sizeof(byte));
    Serial.printf("int: %d\n",sizeof(int));
    Serial.printf("short: %d\n",sizeof(short));
    Serial.printf("word: %d\n",sizeof(word));
    Serial.printf("long: %d\n",sizeof(long));
    Serial.printf("float: %d\n",sizeof(float));
    Serial.printf("double: %d\n",sizeof(double));
結果は、
char: 1
byte: 1
int: 4
short: 2
word: 4
long: 4
float: 4
double: 8
何と、intは4バイトだったんですね。 2バイト思って使っていました。 これでは変な結果になるわけです。
arduinoとesp32も分けて考えないと。 arduinoではintとwordが2バイト、doubleが4バイトだったりでウェブに書いてある情報もどちらの話をしているのか頭に入れとかないとおかしなことになってしまいそうです。

コメント(1)