Taro-ビット処理(公開版).jtd

Similar documents
Taro-プログラミングの基礎Ⅱ(公

Taro-リストⅠ(公開版).jtd

Taro-最大値探索法の開発(公開版

< F2D837C E95CF CF68A4A94C5816A2E6A>

Taro-再帰関数Ⅱ(公開版).jtd

Taro-再帰関数Ⅲ(公開版).jtd

プログラミング基礎

Report#2.docx

Microsoft Word - Cプログラミング演習(11)

Taro-リストⅢ(公開版).jtd

演習課題No12

gengo1-11

Taro-ファイル処理(公開版).jtd

Report#2.docx

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

プログラミング実習I

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

計算機プログラミング

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - kougi7.ppt

Microsoft Word - 3new.doc

スライド 1

48 * *2

Taro-スタック(公開版).jtd


JavaプログラミングⅠ

02

初歩のC言語ターミナル_2014_May.pages

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Microsoft Word - no103.docx

Microsoft PowerPoint - CproNt05.ppt [互換モード]

kiso2-09.key

JavaプログラミングⅠ

Taro-2分探索木Ⅱ(公開版).jtd

Prog1_10th

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

Taro-2分探索木Ⅰ(公開版).jtd

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

C言語によるアルゴリズムとデータ構造

PowerPoint Presentation

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

情報処理演習 B8クラス

Taro-Basicの基礎・条件分岐(公

ユニセフ表紙_CS6_三.indd

PSCHG000.PS

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(Java) サンプル問題 知識科目 第 1 問 (

fuga scanf("%lf%*c",&fuga); 改行文字を読み捨てる 10 進数の整数 おまじない取り込んだ値を代入する変数 scanf( %d%*c,&hoge); キーボードから取り込め という命令 1: scanf 1 1: int double scanf %d %lf printf

プログラミングA

講習No.8

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft PowerPoint - program.ppt [互換モード]

ポインタ変数

新・明解C言語で学ぶアルゴリズムとデータ構造

gengo1-2

Taro-再帰関数Ⅰ(公開版).jtd

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - kougi9.ppt

PowerPoint Presentation

数値計算

2

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

[Problem D] ぐらぐら 一般に n 個の物体があり i 番目の物体の重心の x 座標を x i, 重さを w i とすると 全体の n 重心の x 座標と重さ w は x = ( x w ) / w, w = w となる i= 1 i i n i= 1 i 良さそうな方法は思いつかなかった

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi11.ppt

Taro-ポインタ変数Ⅰ(公開版).j

main

ポインタ変数

プログラミング基礎

2

ポインタ変数

Microsoft Word - Cプログラミング演習(3)

第2回講義:まとめ

printf("5つの整数を入力して下さい \n"); /* データ入力 */ for( /*** 02 ***/ ){ printf("%dつ目の入力 :",i+1); scanf("%d", /*** 03 ***/ ); sum=dat[0]; /* 合計値の初期設定 */ n_max= 0


‚æ2›ñ C„¾„ê‡Ìš|

Microsoft PowerPoint - 06.pptx

C言語7

Taro10-名張1審無罪判決.PDF

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

ファイル入出力

講習No.12

Microsoft Word - Cプログラミング演習(8)

:30 12:00 I. I VI II. III. IV. a d V. VI

C のコード例 (Z80 と同機能 ) int main(void) { int i,sum=0; for (i=1; i<=10; i++) sum=sum + i; printf ("sum=%d n",sum); 2

第2回

8 / 0 1 i++ i 1 i-- i C !!! C 2

PowerPoint プレゼンテーション

Java講座

Microsoft PowerPoint - KHPCSS pptx

Microsoft Word - no02.doc

情報処理Ⅰ演習

Microsoft Word - Cプログラミング演習(12)

ユニセフ表紙_CS6_三.indd

DVIOUT

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Javaによるアルゴリズムとデータ構造

Transcription:

0. 目次 1. ビット演算 1. 1 論理積 論理和 排他的論理和 1. 2 左シフト 右シフト 2. ビット列操作 2. 1 char 型変数の表示 2. 2 int 型変数の表示 2. 3 int 型変数のビット数 2. 4 ビット単位の設定 3. 課題 3. 1 文字の詰め込みと取り出し 3. 2 ビット反転 3. 3 巡回シフト - 1 -

1. ビット演算 つぎのビット演算を使って ビット単位の処理ができる 演算 機能 例 ビット単位の論理積 & 01010011 0&0 = 0 & 00001111 0&1 = 0 00000011 1&0 = 0 1&1 = 1 ビット単位の論理和 01010011 0 0 = 0 00001111 0 1 = 1 01011111 1 0 = 1 1 1 = 1 ビット単位の排他的論理和 ^ 01010011 0^0 = 0 ^ 00001111 0^1 = 1 01011100 1^0 = 1 1^1 = 0 << 左シフト a << 2 最右端から 0が詰められる aを 2ビット左シフトする 00001111 --> 00111100 >> 右シフト a >> 2 最左端のビットが詰められる aを 2ビット右にシフトする 00001111 --> 00000011 11110000 --> 11111100-2 -

1. 1 論理積論理和排他的論理和 プログラム (b111.c) 1 /* << b111.c >> */ 4 char x,y,z; /* 1 文字は 8 ビットで表される 5 8 進定数は先頭に 0 を付ける 6 16 進定数は先頭に 0x( または 0X) を付ける */ 7 x = 0x53; 8 y = 0x0f; 9 /* 論理積 */ 10 z = x & y; printf(" 論理積 : %02x & %02x = %02x\n",x,y,z); 11 /* 論理和 */ 12 z = x y; printf(" 論理和 : %02x %02x = %02x\n",x,y,z); 13 /* 排他的論理和 * / 14 z = x ^ y; printf(" 排他的論理和 : %02x ^ %02x = %02x\n",x,y,z); 15 } % cc b111.c 論理積 : 53 & 0f = 03 論理和 : 53 0f = 5f 排他的論理和 : 53 ^ 0f = 5c - 3 -

1. 2 左シフト右シフト char 型変数の左シフト 右シフトを示す プログラム (b112.c) 1 /* << b112.c >> */ 4 int i; 5 char x,y; 6 x = 0x0f; 7 /* 左シフト */ 8 for( i=1; i<=5; i++ ) { 9 y = x << i; 10 printf(" 左シフト : %02x << %d = %02x\n",x,i,y); 11 } 12 printf("\n"); 13 /* 右シフト */ 14 for( i=1; i<=5; i++ ) { 15 y = x >> i; 16 printf(" 右シフト : %02x >> %d = %02x\n",x,i,y); 17 } 18 printf("\n"); 19 20 x = 0xf0; 21 /* 左シフト */ 22 for( i=1; i<=5; i++ ) { 23 y = x << i; 24 printf(" 左シフト : %02x << %d = %02x\n",x,i,y); 25 } 26 printf("\n"); 27 /* 右シフト */ 28 for( i=1; i<=5; i++ ) { 29 y = x >> i; 30 printf(" 右シフト : %02x >> %d = %02x\n",x,i,y); 31 } 32 } - 4 -

% cc b112.c 左シフト : 0f << 1 = 1e 左シフト : 0f << 2 = 3c 左シフト : 0f << 3 = 78 左シフト : 0f << 4 = fffffff0 左シフト : 0f << 5 = ffffffe0 右シフト : 0f >> 1 = 07 右シフト : 0f >> 2 = 03 右シフト : 0f >> 3 = 01 右シフト : 0f >> 4 = 00 右シフト : 0f >> 5 = 00 左シフト : fffffff0 << 1 = ffffffe0 左シフト : fffffff0 << 2 = ffffffc0 左シフト : fffffff0 << 3 = ffffff80 左シフト : fffffff0 << 4 = 00 左シフト : fffffff0 << 5 = 00 右シフト : fffffff0 >> 1 = 右シフト : fffffff0 >> 2 = 右シフト : fffffff0 >> 3 = 右シフト : fffffff0 >> 4 = 右シフト : fffffff0 >> 5 = fffffff8 fffffffc fffffffe ffffffff ffffffff - 5 -

int 型変数の左シフト 右シフトを示す プログラム (b113.c) 1 /* << b113.c >> */ 4 int x,y; 5 x = 0x0000000f; 6 /* 左シフト */ 7 y = x << 1; printf(" 左シフト : %08x << 1 = %08x\n",x,y); 8 y = x << 1; printf(" 左シフト : %d << 1 = %d\n\n",x,y); 9 /* 右シフト */ 10 y = x >> 1; printf(" 右シフト : %08x >> 1 = %08x\n",x,y); 11 y = x >> 1; printf(" 右シフト : %d >> 1 = %d\n\n",x,y); 12 13 x = 0xffffffff; 14 /* 左シフト */ 15 y = x << 1; printf(" 左シフト : %08x << 1 = %08x\n",x,y); 16 y = x << 1; printf(" 左シフト : %d << 1 = %d\n\n",x,y); 17 /* 右シフト */ 18 y = x >> 1; printf(" 右シフト : %08x >> 1 = %08x\n",x,y); 19 y = x >> 1; printf(" 右シフト : %d >> 1 = %d\n",x,y); 20 } % cc b113.c 左シフト : 0000000f << 1 = 左シフト : 15 << 1 = 30 0000001e 右シフト : 0000000f >> 1 = 00000007 右シフト : 15 >> 1 = 7 左シフト : ffffffff << 1 = 左シフト : -1 << 1 = -2 右シフト : ffffffff >> 1 = 右シフト : -1 >> 1 = -1 fffffffe ffffffff - 6 -

2. ビット列操作 2. 1 char 型変数の表示 プログラム (b211.c) 1 /* << b211.c >> */ 4 char a; /* 文字 */ 5 int b[32], /* ビットを保存する配列 */ 6 i; 7 void bitshow(char a, int b[]); 8 while( 1 ) { 9 scanf("%c",&a); /* ^C で終了 */ 10 printf(" 文字 : %c\n",a); 11 printf(" 文字コード : %d\n",a); 12 bitshow(a,b); 13 for( i=7; i>=0; i-- ) { printf("%d",b[i]); } 14 printf("\n"); 15 } 16 } 17 void bitshow(char a, int b[]) { 18 int i,t; 19 t = 0x01; 20 for( i=0; i<8; i++ ) { 21 b[i] = 0; 22 if( (int)(a&t) == t ) { b[i] = 1; } 23 t = t << 1; 24 } 25 } % cc b211.c 1a 文字 : 1 文字コード : 49 00110001 文字 : a 文字コード : 97 01100001 文字 : 文字コード : 10 00001010-7 -

2. 2 int 型変数の表示 プログラム (b221.c) 1 /* << b221.c >> */ 4 int a, /* 整数 */ 5 i; 6 void bitshow(int a); 7 while( 1 ) { 8 scanf("%d",&a); if( a == 0 ) { break; } 9 bitshow(a); 10 } 11 } 12 void bitshow(int a) { 13 int i,t, 14 b[32]; /* ビットを保存する配列 */ 15 t = 0x00000001; 16 for( i=0; i<32; i++ ) { 17 b[i] = 0; if( (int)(a&t) == t ) { b[i] = 1; } 18 t = t << 1; 19 } 20 for( i=31; i>=0; i-- ) { 21 printf("%d",b[i]); if( i%8 == 0 ) { printf(" "); } 22 } 23 printf("\n"); 24 } % cc b221.c 3 00000000 00000000 00000000 00000011 2 00000000 00000000 00000000 00000010 1 00000000 00000000 00000000 00000001-1 11111111 11111111 11111111 11111111-2 11111111 11111111 11111111 11111110 0-8 -

2. 3 int 型変数のビット数 int 型変数のビット 1 の個数を求める プログラム (b231.c) 1 /* << b231.c >> */ 4 int a; /* 整数 */ 5 int bitnum(int a); 6 while( 1 ) { 7 scanf("%d",&a); if( a == 0 ) { break; } 8 bitnum(a); 9 printf(" 整数 %d に含まれる 1 の個数 =%d\n",a,bitnum(a)); 10 } 11 } 12 int bitnum(int a) { 13 int i,sum,t; 14 t = 0x00000001; 15 sum = 0; 16 for( i=0; i<32; i++ ) { 17 if( (int)(a&t) == t ) { sum++; } 18 t = t << 1; 19 } 20 return sum; 21 } % cc b231.c 1024 整数 1024 に含まれる 1 の個数 =1 10 整数 10 に含まれる 1 の個数 =2-1 整数 -1 に含まれる 1 の個数 =32 0-9 -

2. 4 ビット単位の設定 int 型整数において 下位から i 番目のビットを k( 0 or 1) にセットする プログラム (b241.c) 1 /* << b241.c >> */ 4 int a,c, /* 整数 */ 5 i,k; 6 int bitset(int a, int i, int k); 7 void bitshow(int a); 8 while( 1 ) { 9 scanf("%d%d%d",&a,&i,&k); if( a == 0 ) { break; } 10 c = bitset(a,i,k); 11 bitshow(c); 12 } 13 } 14 int bitset(int a, int i, int k) { 15 int j,t; 16 if ( k == 1 ) { 17 t = 0x00000001; 18 t = t << (i-1); /* i-1ビット左にシフト */ 19 a = a t; /* 1を埋め込む */ 20 } else { 21 t = 0xfffffffe; 22 /* i-1ビット左にシフト */ 23 for( j=1; j<=i-1; j++ ) { 24 t = t << 1; t = t 0x00000001; 25 } 26 a = a & t; /* 0を埋め込む */ 27 } 28 return a; 29 } 30 void bitshow(int a) { 31 int i,t, 32 b[32]; /* ビットを保存する配列 */ 33 t = 0x00000001; 34 for( i=0; i<32; i++ ) { 35 b[i] = 0; if( (int)(a&t) == t ) { b[i] = 1; } 36 t = t << 1; 37 } 38 for( i=31; i>=0; i-- ) { 39 printf("%d",b[i]); if( i%8 == 0 ) { printf(" "); } 40 } 41 printf("\n"); 42 } - 10 -

% cc b241.c 15 1 0 00000000 00000000 00000000 00001110 1 8 1 00000000 00000000 00000000 10000001 0 0 0-11 -

3. 課題 3. 1 文字の詰め込みと取り出し 4 文字を読み込み 1 つの int 型整数に詰め込む プログラム (b311.c) 1 /* << b311.c >> */ 4 char ch[4],w; /* 文字は 8ビット */ 5 int z,i; /* int 型整数は 32ビット */ 6 /* 文字の埋め込み */ 7 printf(" 文字の埋め込み \n"); 8 z = 0x00000000; /* 詰め込む変数 */ 9 ch[0] = 'a'; 10 ch[1] = 'b'; 11 ch[2] = 'c'; 12 ch[3] = 'd'; 13 for( i=0; i<=3; i++ ) { 14 z = /* 8ビット左にシフト */ 15 z = /* 変数 zの右端 8ビットに文字 ch[i] を埋め込む */ 16 printf("z = %8x\n",z); /* 16 進数で表示 */ 17 } 18 /* 文字の取り出し */ 19 printf(" 文字の取り出し \n"); 20 for( i=1; i<=4; i++ ) { 21 w = /* 変数 zの右端 8ビットを取り出す */ 22 printf("%c\n",w); 23 z = /* 8ビットを右にシフト */ 24 } 25 } % cc b311.c 文字の埋め込み z = 61 z = 6162 z = 616263 z = 61626364 文字の取り出し d c b a - 12 -

3. 2 ビット反転 int 型変数のビットを反転 (0 を 1 1 を 0) する プログラム (b321.c) 1 /* << b321.c >> */ 4 int a,b; /* 正整数 */ 5 int bitreverse(int a); 6 void bitshow(int a); 7 while( 1 ) { 8 scanf("%d",&a); if( a == 0 ) { break; } 9 printf("a=%d\n",a); 10 printf(" 反転前 : "); bitshow(a); 11 b = bitreverse(a); 12 printf("b=%d\n",b); 13 printf(" 反転後 : "); bitshow(b); 14 } 15 } 16 int bitreverse(int a) { 17 int b,i,t; 18 b = 0x00000000; 19 t = 0x00000001; 20 for( i=0; i<32; i++ ) { 21 if( ) { b = b t; } 22 t = t << 1; 23 } 24 return b; 25 } 26 void bitshow(int a) { 27 int i,t, 28 b[32]; /* ビットを保存する配列 */ 29 t = 0x00000001; 30 for( i=0; i<32; i++ ) { 31 b[i] = 0; 32 if( ) { b[i] = 1; } 33 t = t << 1; 34 } 35 for( i=31; i>=0; i-- ) { 36 printf("%d",b[i]); 37 if( ) { printf(" "); } 38 } 39 printf("\n"); 40 } - 13 -

% cc b321.c 2 a=2 反転前 : 00000000 00000000 00000000 00000010 b=-3 反転後 : 11111111 11111111 11111111 11111101 1 a=1 反転前 : 00000000 00000000 00000000 00000001 b=-2 反転後 : 11111111 11111111 11111111 11111110-1 a=-1 反転前 : 11111111 11111111 11111111 11111111 b=0 反転後 : 00000000 00000000 00000000 00000000-2 a=-2 反転前 : 11111111 11111111 11111111 11111110 b=1 反転後 : 00000000 00000000 00000000 00000001 0-14 -

3. 3 巡回シフト int 型変数を右にシフトする 移動したビットは 最右端から挿入する たとえば 00000011 を意義に 1 ビットシフトすると 10000001 となる プログラム (b331.c) 1 /* << b331.c >> */ 4 int a,b, /* 正整数 */ 5 k; 6 int bitshift(int a, int k); 7 void bitshow(int a); 8 while( 1 ) { 9 scanf("%d%d",&a,&k); if( a == 0 ) { break; } 10 printf(" 巡回シフト前 : "); bitshow(a); 11 b = bitshift(a,k); 12 printf(" 巡回シフト後 : "); bitshow(b); 13 } 14 } 15 int bitshift(int a, int k) { 16 int b,i,s0,s1,t; 17 t = 0x00000001; s0 = 0x80000000; s1 = 0x7fffffff; 18 b = a; 19 for( i=1; i<=k; i++ ) { 20 if( ) { 21 b = b >> 1; 22 } else { 23 b = b >> 1; 24 } 25 } 26 return b; 27 } 28 void bitshow(int a) { 29 int i,t, 30 b[32]; /* ビットを保存する配列 */ 31 t = 0x00000001; 32 for( i=0; i<32; i++ ) { 33 b[i] = 0; 34 if( ) { b[i] = 1; } 35 t = t << 1; 36 } 37 for( i=31; i>=0; i-- ) { 38 printf("%d",b[i]); 39 if( ) { printf(" "); } 40 } 41 printf("\n"); 42 } - 15 -

% cc b331.c 2 1 巡回シフト前 : 00000000 00000000 00000000 00000010 巡回シフト後 : 00000000 00000000 00000000 00000001 2 2 巡回シフト前 : 00000000 00000000 00000000 00000010 巡回シフト後 : 10000000 00000000 00000000 00000000 2 3 巡回シフト前 : 00000000 00000000 00000000 00000010 巡回シフト後 : 01000000 00000000 00000000 00000000-2 1 巡回シフト前 : 11111111 11111111 11111111 11111110 巡回シフト後 : 01111111 11111111 11111111 11111111-2 2 巡回シフト前 : 11111111 11111111 11111111 11111110 巡回シフト後 : 10111111 11111111 11111111 11111111-2 3 巡回シフト前 : 11111111 11111111 11111111 11111110 巡回シフト後 : 11011111 11111111 11111111 11111111 0 0-16 -