🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

755閲覧

[ビット演算]char c = -1のビットを表示させたいが全て1になる理由が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/03/05 03:11

提示コードの関数ですが。char型の-1という値が来るので表示すると 1 0 0 0 0 0 0 1と表示されるはずなのですが 全て1になってしまいます。これはなぜなのでしょうか? 3とか正の値なら普通にビットを表示してくれるのですが負の値になると表示がおかしくなる理由が知りたいです。

cpp

1#include <iostream> 2#include <filesystem> 3 4#include <map> 5 6 7void print_bit(char bit) 8{ 9 for (int i = 7; i >= 0; i--) 10 { 11 12 printf(" %d ",bit >> i & 0x01); 13 } 14} 15 16int main() 17{ 18 19 //printf("size: %d\n", sizeof(char)); 20 21 char c = -1; 22 23 print_bit(c); 24 25// printf("%d\n",(int)c); 26 27 28 return 0; 29}

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

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

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

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

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

guest

回答2

0

ベストアンサー

負の数というのは一般的には2の補数表現です
char の-1 ってのは0xff となります

投稿2021/03/05 03:14

編集2021/03/05 03:17
y_waiwai

総合スコア88038

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

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

退会済みユーザー

退会済みユーザー

2021/03/05 04:36

char型に限った話なのでしょうか?
SaitoAtsushi

2021/03/05 05:08

いいえ。 整数型全般です。 ただし、 C/C++ の言語仕様としては ・ 1 の補数 ・ 2 の補数 ・ 符号と絶対値 の表現を認めており、処理系・実行環境の都合によってこのいずれかを選択することになります。 https://timsong-cpp.github.io/cppwp/n3337/basic.fundamental#7 自分がターゲットにしている動作環境が 2 の補数を選択していることは念のために確認するとよいでしょう。 ただし、もう 2 の補数以外は事実上滅びたので (少なくとも普通のパソコンのプログラミングでは) 他の方式を見る機会はまずないです。 また、 C++20 からは負数の表現は 2 の補数であることが保証されるようになりましたので遠慮なくあてにできるようになりました。
退会済みユーザー

退会済みユーザー

2021/03/05 06:00

なるほど。char の-1 0xff とおぼえて置けばいいのでしょうか?
y_waiwai

2021/03/05 06:17

int なら、0xffffffff になりますよ。 0から1を引くと考えればなぜこの値になるのかがわかるかと
otn

2021/03/05 11:12

> char の-1 0xff とおぼえて置けばいいのでしょうか? そんな細かいことを1つ1つ覚える物ではないです。char の -2 は 0xfe とかも覚えるつもりですか? 「2の補数」を理解すれば良いだけです。
guest

0

「2の補数」で検索して、解説ページでも動画でも見てください。

-1 は 8ビットなら「11111111」になります。「10000001」は -127 です。

投稿2021/03/05 03:16

Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問