C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

bitについて

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■92974 / inTopicNo.1)  bitについて
  
□投稿者/ あい (7回)-(2019/11/12(Tue) 13:22:40)

分類:[.NET 全般] 




初歩的な質問なのですが、true、falseは何bitなのでしょうか?
二つしかないので2bitでしょうか?

初心者のため優しく教えていただけると助かります。
引用返信 編集キー/
■92976 / inTopicNo.2)  Re[1]: bitについて
□投稿者/ みい (105回)-(2019/11/12(Tue) 13:41:30)
No92974 (あい さん) に返信
> 初歩的な質問なのですが、true、falseは何bitなのでしょうか?
> 二つしかないので2bitでしょうか?
サイズについてはこちらの一覧を参照ください。
http://park1.wakwak.com/~ima/dotnet_cs_datatypes.html

> 初心者のため優しく教えていただけると助かります。
で、このサイズについて議論していた過去ログ
http://bbs.wankuma.com/index.cgi?mode=al2&namber=77388&KLOG=131

まずはこちらを見て分からないところがあれば書き込みください。

引用返信 編集キー/
■92977 / inTopicNo.3)  Re[1]: bitについて
□投稿者/ Hongliang (914回)-(2019/11/12(Tue) 13:42:32)
真偽は 1 と 0 で表現できるので、最小だと 1bit で表現できます。
実際にどのサイズの値を使うかは言語や実行環境によります。
.NET Frameworkの場合、Boolean構造体は 1byte = 8bit 使用する、となっています。
https://docs.microsoft.com/en-us/dotnet/api/system.boolean?view=netframework-4.8

質問の背景によっては、また色々話すこともあるかもしれません。
引用返信 編集キー/
■92982 / inTopicNo.4)  Re[1]: bitについて
□投稿者/ 大谷刑部 (60回)-(2019/11/12(Tue) 14:18:19)
No92974 (あい さん) に返信
> 初歩的な質問なのですが、true、falseは何bitなのでしょうか?
> 二つしかないので2bitでしょうか?
論理値としてはTrueとFalseの二つだけなので、概念的には1bitなのでしょうが、
型としてのbooleanはfalse:0とtrue:それ以外だったと思うので、
言語によって考え方が異なり、true:割り当てている値が違う。

「割り当てている」ということは、物理的には整数値の領域が必要で、VBでは整数型の最小(6以前はint,.netはsmallint)の領域を持っているのでしょうね。
VBでなぜtrue:-1と割り当てているかは知りません。

引用返信 編集キー/
■92984 / inTopicNo.5)  Re[1]: bitについて
□投稿者/ 魔界の仮面弁士 (2478回)-(2019/11/12(Tue) 15:01:15)
No92974 (あい さん) に返信
> 初歩的な質問なのですが、true、falseは何bitなのでしょうか?

文脈依存です。


殆どの処理系において、FALSE は「値ゼロ」で定義されます。
それに対して TRUE は、「FALSE ではない値」の 1 つであるわけですが、
その内部値が 1 なのか -1 なのかそれ以外なのかは処理系依存ですし、
それを格納するための bit 数もまちまちです。



(1) 【VARIANT_BOOL】 … 16 bit ( 2 バイト)

.NET マーシャラで言えば System.Runtime.InteropServices.UnmanagedType.VariantBool 。
VBA や VBScript 向けの COM コンポーネントとして設計されていた場合に使われるのがこのタイプ。

上記 VARIANT の場合、
二進数で 0000000000000000 が FALSE であるため、ビット反転させた
二進数で 1111111111111111 を TRUE として扱うようになっています。

このケースでは「false → 16bit の 0」「true → 16bit の -1」です。



(2) 【BOOL】 … 32 bit ( 4 バイト)

.NET マーシャラで言えば System.Runtime.InteropServices.UnmanagedType.Bool 。
Win32 API で BOOL 型として知られるのがこのタイプ。

このケースでは「false → 16bit な 0」「true → 16bit な "0以外の任意値"」です。


(3) 【bool】 … 8 bit ( 1 バイト)

.NET マーシャラで言えば System.Runtime.InteropServices.UnmanagedType.I1 。
C スタイルの bool 型として知られるのがこのタイプ。

このケースでは「false → 8bit な 0」「true → 8bit な 1」です。


(4) Transact-SQL【bit】 … 1 bit〜

SQL Server のフィールドで使われる型です。
このケースでは「false → 1bit な 0」「true → 1bit な 1」です。

データサイズは 1bit ですが、最低単位はバイトであるため、
bit 型の列がテーブル内に 1〜8 個の場合は 8bit(1 バイト)が消費されますし、
bit 型の列がテーブル内に 9〜16 個あれば 16bit(2 バイト)が消費されます。
引用返信 編集キー/
■92985 / inTopicNo.6)  Re[2]: bitについて
□投稿者/ あい (8回)-(2019/11/12(Tue) 15:01:45)
No92977 (Hongliang さん) に返信
> 真偽は 1 と 0 で表現できるので、最小だと 1bit で表現できます。
> 実際にどのサイズの値を使うかは言語や実行環境によります。
> .NET Frameworkの場合、Boolean構造体は 1byte = 8bit 使用する、となっています。
> https://docs.microsoft.com/en-us/dotnet/api/system.boolean?view=netframework-4.8
>
> 質問の背景によっては、また色々話すこともあるかもしれません。


.NET Framework4.0の環境で作成しています。Boolean型 = 8bit = 1byteというのは分かりました。

例えば横軸で2進数で並べたとき

32768,16384,8192,4096,2048,1024,512,256 | 128,64,32,16,8,4,2,1

1だけで収まるという事でしょうか?
引用返信 編集キー/
■92987 / inTopicNo.7)  Re[3]: bitについて
□投稿者/ 魔界の仮面弁士 (2479回)-(2019/11/12(Tue) 15:25:28)
No92985 (あい さん) に返信
> .NET Framework4.0の環境で作成しています。Boolean型 = 8bit = 1byteというのは分かりました。

System.Boolean 構造体そのものは 1 バイトですが、
API 呼び出しや COM 呼び出しなどにおいては、その段階で
別のサイズに指し換わることがあります。


> 例えば横軸で2進数で並べたとき
> 32768,16384,8192,4096,2048,1024,512,256 | 128,64,32,16,8,4,2,1
> 1だけで収まるという事でしょうか?

質問の意図が分からないのですが、
符号なし 1 バイトなら 0〜255
符号なし 2 バイトなら 0〜65535 の範囲です。


もしも
> 32768,16384,8192,4096,2048,1024,512,256 | 128,64,32,16,8,4,2,1
を 16bit の 2 進数表記に変換したら、こうなりますね。

 32768 => 1000000000000000
 16384 => 0100000000000000
  8192 => 0010000000000000
  4096 => 0001000000000000
  2048 => 0000100000000000
  1024 => 0000010000000000
   512 => 0000001000000000
   256 => 0000000100000000
   128 => 0000000010000000
    64 => 0000000001000000
    32 => 0000000000100000
    16 => 0000000000010000
     8 => 0000000000001000
     4 => 0000000000000100
     2 => 0000000000000010
     1 => 0000000000000001

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ