質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

3614閲覧

C言語で、数字のバイト数の求め方

jegan

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

0クリップ

投稿2020/03/14 08:37

C言語で、数字のバイト数の求め方

をご教授願いたいです。

該当のソースコード

#include <stdio.h> int main() { int a = 99999; printf("%d\n", sizeof a); getchar(); return 0; }

aの中身がどんな数字でも出力結果が4になってしまいます。
プログラミング始めたばかりであんまりわかってません。すみません…

環境

VS Community 2017

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/03/14 08:45

intが4バイトなのでは?
asm

2020/03/14 08:48

何を期待していますか?
jegan

2020/03/14 08:50

そうみたいです。shortにしたら2が出力されました。
guest

回答3

0

ベストアンサー

数字何桁分かの記入欄をイメージして下さい。その記入欄が何桁分なのか、というのが変数のサイズです。そこに何桁分実際に記入されているか(変数に入っている値が何なのか)は関係ありません。

ただし、コンピュータの中なので、その「記入欄」は2進数になっていて、
殆どのシステムでは2進数を8桁分(8bit分)まとめて「バイト」としていて、
バイトがchar型で、サイズの単位として1になり
intは現代の多くのシステムで4バイト分の「記入欄」を持っているのでsizeof(int)は4になる、というのが流れです。なお、sizeof(int)が4でないコンピュータもそれなりにありますので、状況によっては決めつけないほうがいいです。

ついでに言えば、printfは出力した文字数を返すので、

C

1int a=99999; 2int s=printf("%d",a);

とすると、sは5に(あるいはaが999ならsは3に)なります。

投稿2020/03/14 09:05

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jegan

2020/03/14 09:14

すっきりしました。最後の補足がありがたかったです。 僕はビットとバイトを混同していたみたいです^^; strlen関数というものがあることを知って、文字列だけでなく数字(int型)の文字数が求めたかったんです 親切に回答していただきありがとうございました。
otn

2020/03/14 15:34

> 数字(int型)の文字数 数値(int型)に文字数はありません。文字じゃないので。 数値(int型)を文字列に変換すると、文字数が数えられます。
thkana

2020/03/14 22:35

> 数値(int型)に文字数はありません。文字じゃないので。 説明しよう(って、昔アニメねた) 「値」ってのは本来は概念なんですよ。***** ***** いくつですか? これを10とかtenとか十とか、なんと表そうととにかく*の個数は変わらないです。その数そのものが「数値」。だから、数値に文字数なんてものは定義できません。 その数値を十進数でアラビア数字で表しましょうね、と決めて初めて「表記」が決まって、"10"という数字で書けて、2という文字数が出てくるのです。 日常生活では数値と数字を区別しませんし、数値を表すのは暗黙の了解として10進数アラビア数字でしょう。でも、コンピュータは本来「数値」しか扱えず、文字に対してある数値を割り当てて(いわゆる文字コード)、「ここは文字ですよ」という約束のもとに数値で文字を扱うようにしています。 なので、数値と数字(文字)をきっちり区別して考えないとまともな結果が得られない場面もある、という話です。
guest

0

sizeof演算子は、変数の領域サイズ(メモリに占める大きさ:バイト数)を返します。
従って、質問の開発環境では、intが4バイトの領域を使用するため4に成ります。
・・・領域が4バイトということは、当然上限と下限があります。
4バイトだと、表せる数値は-2147483648〜+2147483647の間です。

投稿2020/03/14 08:49

編集2020/03/14 09:04
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/03/14 09:05

ちなみに、Linuxでのclangだと、下記の値が範囲と成ります。 SCHAR_MIN: -128 SCHAR_MAX: +127 SHRT_MIN: -32768 SHRT_MAX: +32767 INT_MIN: -2147483648 INT_MAX: +2147483647 LONG_MIN: -9223372036854775808 LONG_MAX: +9223372036854775807
guest

0

ご質問内容は「C言語で、数字のバイト数の求め方」とありますが、
やりたいことは変数aの中身を画面に表示したいということでしょうか?

であれば、以下となります。

c

1printf("%d\n", a);

数字のバイト数=変数のサイズの事をおっしゃっているのであれば、
提示いただいているコードの通りで問題ないかと思います。
変数aはint型なので、sizeof(a)の結果は4になります。

投稿2020/03/14 08:48

ZINZABURO

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問