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

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

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

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

Q&A

解決済

5回答

3563閲覧

U8からどうやって境界値、同値の数字を調べるのか

hasune

総合スコア18

C

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

0グッド

1クリップ

投稿2019/05/12 12:07

編集2019/05/13 11:42

お世話になります。
単体試験において境界値と同値をテストする際、
コードにuint8とあったらここからどうやってテストする数字が分かるのでしょうか?

uint8がunsignedの略であることは調べて分かっており、
unsignedはプラスの数字であるためマイナスはないことまでは分かっています。
分からないのがuint8の8の部分で、
uint8もそうですがこれがuint2やuint4だった場合境界値と同値の数字がどうなるのか分かりません。

どのような考え方をすれば境界値と同値の数字が分かるのでしょうか?
皆様のお知恵をお貸しください。どうぞよろしくお願いいたします。

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

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

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

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

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

HogeAnimalLover

2019/05/12 15:27

多分、会社内の用語とか会社内のルールが関与しています。ここで質問されても回答できません。
guest

回答5

0

名前だけでは、わかりません。

typedefもしくは#defineしている箇所を探し出してどういう型なのかを確定させる必要があります。

見つからない場合の裏技として

sizeof(U8)でバイト数が分かるので256sizeof(U8)乗を計算して-1したものが符号なしの場合の最大値の可能性が高いです。


c++を使える場合std::numeric_limitsを用いることで

c++

1#include <iostream> 2#include <limits> 3 4using std::cout, std::endl; 5typedef unsigned int U1; 6typedef long long U2; 7 8int main(){ 9 cout << std::numeric_limits<U1>::max() << endl; 10 cout << std::numeric_limits<U1>::min() << endl; 11 cout << std::numeric_limits<U2>::max() << endl; 12 cout << std::numeric_limits<U2>::min() << endl; 13}

のように取得する事が可能です

投稿2019/05/12 13:36

asm

総合スコア15147

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

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

hasune

2019/05/13 12:13

すみません、U8ではなくuint8の書き方でした。 U8とuint8は同じと聞いてるので意味はないかもしれませんが・・・。 このような感じでコードには出てきました。 △△(〇△〇) ▼□▼(□□□ uint8) { #if(☆☆) ☆〇☆=□〇□; #else ☆〇☆=(U1)0;; #endif switch(式){ case cat: tama[□■]=●●(☆★); break; ・ ・ この先caseが続きます ・ >typedefもしくは#defineしている箇所を探し出してどういう型なのかを確定させる必要があります。 見つからない場合の裏技として sizeof(U8)でバイト数が分かるので256のsizeof(U8)乗を計算して-1したものが符号なしの場合の最大値の可能性が高いです。 見つけ方のアドバイスありがとうございます! #defineは知っていましたが、typedefとsizeof(U8)は知らなかったので勉強になります。
asm

2019/05/14 02:01

uint8_t型でありC99規格に準拠したCコンパイラの場合 stdint.hにUINT8_MAXがdefineされています。
hasune

2019/05/14 11:46

知識不足で上手く理解できてるか分かりませんが、 ヘッダーファイルにあるUINT8_MAXがコンパイル時に前処理されるということで合ってますか?
asm

2019/05/14 12:02

uint8_tの最大値255がUINT8_MAXという定数になっている。ということです。
hasune

2019/05/14 12:19

申し訳ありません。全然違いましたね・・・。 下記のサイトの「記号定数の定義」の項の意味で良かったでしょうか? >ソース上に、意味のある定数を10や25など直接の数値、いわゆるマジック・ナンバーとして書いてしまうのはよいことではありません。後でプログラムを読む人がこの数値の意味を理解できませんし、数値が変更になった場合、ソースのいたるところを修正しなければなりません。 これを避けるために、defineをよく使用します。例えば、下記のように上限値と下限値を記号定数として定義し、使用すれば、ソースを読む時にその意味がわかりますし、上限値、下限値が変更になった場合、defineしたところだけ変えれば、変更が全てのソースに反映されます。 http://www.c-lang.org/define.html
asm

2019/05/14 14:37

それですね。
hasune

2019/05/15 12:05

こちらで合っていましたか!良かったです。 asmさんのお陰で考え方が分かりました。ありがとうございます!
guest

0

U8もそうですがこれがU2やU4だった場合

U8だけ目にしたら、「符号無し整数8bit」の意味だと思うのが普通ですが、U4やU2と一緒に出てくるとすると、「符号無し整数4bit」や「符号無し整数2bit」という変数は普通無いので、Uが大文字であることからしても、「符号無し整数8バイト」「符号無し整数4バイト」「符号無し整数2バイト」ではないかと思います。
普通はそれぞれ u64 u32 u16 と書くと思うので、U8 U4 U2 は、社内ローカル用語じゃないでしょうか?

投稿2019/05/12 13:04

otn

総合スコア84505

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

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

otn

2019/05/12 13:05

本題の回答を書くのを忘れてました。最小値は0で、最大値は「2のビット数乗-1」です。
hasune

2019/05/13 12:07

すみません、U8ではなくuint8の書き方でした。 U8とuint8は同じと聞いてるので意味はないかもしれませんが・・・。 U8=符号無し整数8bitが濃厚のかもしれません。 普通はu64 u32 u16 と書くのですか! U8を調べた時にサフィックスというのを知ったのでこの書き方なのかと思ったのですが、 これもあまり一般的ではない書き方なのでしょうか? http://d.hatena.ne.jp/Crest/20101108/1289228948 http://www.c-lang.org/constant.html U4やU2は私が前見たコードに(U1)があったのでU1、U2、U3、U4と続くのかと思い、 この場合境界値と同値の数字はどのように求めればいいのかと思って質問させていただきました。
otn

2019/05/13 12:31

英大文字と英小文字は意味が違うことがしばしばです。 例えば、バイトをBで、ビットをbで表すことが多いです。単位としてのビットを英大文字で書くことは無いです(小文字を使えない場合を除く)。 > 普通はu64 u32 u16 と書くのですか! いいえ。普通は、uint8 や uint64 と書きます。また、uint2 とか uint4 とかは無いです。 結局、どこでどういう記述を見たのでしょうか?自分の主観を排して客観的に書いてください。
hasune

2019/05/14 11:38

失礼いたしました! コードはこのようになっています。 △△(〇△〇) ▼□▼(□□□ uint8) { #if(☆☆) ☆〇☆=□〇□; #else ☆〇☆=(U1)0;; #endif switch(式){ case cat: tama[□■]=●●(☆★); break; ・ ・ この先caseが続きます ・ >普通は、uint8 や uint64 と書きます。 一般的な書き方はuint8 や uint64なのですか!勉強になります。
guest

0

U8 って何だろうっと検索したら、

s8 u8 s16 u16 s32 u32 s64 u64 の型とは?
と言う理解で良いでしょうか?

とすれば、unsigned char の事なので、 8bit の符号無しとなります。
u2, u4 の定義は無いと思いますが、違いますか?
あるとすれば、 u8, u16, ...でしょうか。

U8の意味が違ってたら、すみません。

投稿2019/05/12 12:15

pepperleaf

総合スコア6383

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

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

hasune

2019/05/13 11:59

すみません、U8ではなくuint8の書き方でした。 U8とuint8は同じと聞いてるので意味はないかもしれませんが・・・。 知識不足でこれです!とは言えないのですが、 近いように思えます! u2, u4 の定義は私が適当に言いました。 前見たコードに(U1)があったのでU1、U2、U3、U4と続くのかと思っていました・・・。 どうやら違うようですね。勉強になります><
guest

0

ベストアンサー

多分、U8 ってunsigned int8 の略だと思います
いわゆる、unsigned char ですね

8ってのは8bitの意味で、2^8なので、0~255までの範囲になります。
基本的に8が最低単位なので、16や32はあっても、2とか4とかはないと思います

#charは8bitとは限らないけど、その話は置いておいて…

投稿2019/05/12 12:14

izmktr

総合スコア2856

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

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

hasune

2019/05/13 11:55

すみません、U8ではなくuint8の書き方でした。 U8とuint8は同じと聞いてるので意味はないかもしれませんが・・・。 でも、Uはunsignedではなく、 厳密にはunsigned charなのですね!道理で検索してもヒットしないはずです。 U2とU4は適当に言いました。 前見たコードに(U1)があったのでU2やU4があるのかと思ったので質問させていただきました。 申し訳ありません。
guest

0

U8という用語はC言語の仕様にはありません
どういう定義をしてるんでしょうか

投稿2019/05/12 12:09

y_waiwai

総合スコア87749

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

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

hasune

2019/05/13 11:48

すみません、U8ではなくuint8の書き方でした。 U8とuint8は同じと聞いてるので意味はないかもしれませんが・・・。 このような感じでコードには出てきました。 △△(〇△〇) ▼□▼(□□□ uint8) { #if(☆☆) ☆〇☆=□〇□; #else ☆〇☆=(U1)0;; #endif switch(式){ case cat: tama[□■]=●●(☆★); break; ・ ・ この先caseが続きます ・
y_waiwai

2019/05/13 12:28

C言語の標準として、 uint8_t uint16_t uint32_t uint64_t というのがあります それぞれ、unsigned の数字のビット長分の整数定義となってます uint8_t であれば、数値の表現範囲は、0~255となりますね #uint4_t とか uint2_t とかはありません
hasune

2019/05/14 11:31

調べました。以下の意味ということですね! uint8とuint8_tはどうも同じっぽいですね・・・。 uint8の有効範囲が0 ~ 255でここから境界値と同値の数字を考えればいい、 で考え方は合っていますかね? uint8_t→1 バイトの符号なし整数(有効範囲:0 ~ 255) uint16_t→2 バイトの符号なし整数(有効範囲:0 ~ 65,535) uint32_t→4 バイトの符号なし整数(有効範囲:0 ~ 4,294,967,295) uint64_t→8 バイトの符号なし整数(有効範囲:0 ~ 18,446,744,073,709,551,615)
y_waiwai

2019/05/14 11:33

まあ、そういうことじゃないかと。 #そもそも境界値ってなに? <ってそこからかよw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問