シフト演算について
Q&A
Closed
以下の問題について。
文字列を 4 文字まで入力し、これらをひとつの int 型にまとめて 16 進で表示してください。 たとえば、「ABC」と入力された場合は「414243」と表示します。
文字配列 str を宣言し、文字列を入力します。入力する文字数は最長で 4 文字までですが、配列 の要素数は余裕をもって 100 とし、入力には scanf で「%s」書式を使います。char 型は 1 バイ ト、(典型的な)int 型は 4 バイトなので、4 つの文字コードを 1 つの int 型にまとめられます。 表示するときは「%X」書式を使います。
str => ABC
414243
str => 1234
31323334
#include<stdio.h>
#include <stdlib.h>
int main(){
unsigned int num,a;
char str[100];
printf("str =>");
scanf("%s",str);
int code=0;
for(int i=0;i<4&&str[i]!='\0';i++){
code=(code<<8|(unsigned char)str[i]);
}
printf("%X\n",code);
}
forの中身がよくわかっていません。一文字で8ビット使うから左に8ビットシフトしていますよね?0との論理和を取るため、'A'なら0x41=01000001のため、そのままの値がcodeに代入されていく。といった認識でよろしいのでしょうか?
そこでcode=0xFF000000とし、&で論理積をとっても同じ回答は得られませんでした。このコードの説明をお願いしたいです。
あと、このやり方は回りくどくないですか?printf("%X",str[i])で良いと思うのですが。