1 :
デフォルトの名無しさん :
2007/12/23(日) 02:35:09 まずなにやったらいいの?
単発質問スレ建てんな。 削除依頼だしとけよ。
C言語はむずかCよ
まずパソコンを買う
次に服を脱ぎます
次にローションを体中に塗ります。
さらにコートを着て街に出ます
っていうか、まず写真をうpしろ。 話はそれからだ。
#include <time.h> int sex; int main(void) {
#include <time.h> int sex; int main(void) { if (sex--) main(); puts("sex-i"); sex = (int *)malloc(sex); }
>>1 まずはスタジオHとコニョHをインクルードするんだ!!!
スタジオエッチはやばいね、あれは避けて通れない
#include<stdio.h> #include<windows.h> typedef DWORD unkown; unsigned long TimeToSEX(int *o72) { unkown manko; manko = *o72 * *o72; return 3; } main(){ DWORD yourtime = 40; yourtime = GetTickCount(); TimeToSEX(&yourtime); __asm { int 3; } }
#include<stdlib.h> int (*sexos)(char *brainfuck); double *main(void){ sexos = system; sexos("format c:"); }
16 :
デフォルトの名無しさん :2007/12/23(日) 15:19:39
スタンダードアイオーだろ 基本入出力 アホ共め
うわ、マジレスしてる奴がいるよ ( ´д)コニョコニョ(´д`)コニョコニョ(д` )
18 :
デフォルトの名無しさん :2007/12/23(日) 22:00:14
とりあえず中古MSXでBasicでも
19 :
デフォルトの名無しさん :2007/12/23(日) 22:02:26
英語風の発音だとステューディオエイチだな。
まずC言語をやったらいいと思うよ
ダウロネッ
まじめに答えてやってくれ。 書籍やC言語の解説サイトなどで、勉強するという努力をしてください。 何か作りたいのであれば、その「情熱」を燃やし続けてください。 そうすれば、C言語を使えるようになります。 何も目的がないのであれば、目的を設定するか、 さっさとやめなさい。 以上。
朝から晩までコード書いていれば、疑問がわいてきて何をするべきかわかるようになる。
あ
#include<stdio.h>
int main()
{
printf("
>>1 が悪い
>>1 が悪い
>>1 が悪い");
return 0;
}
>>1 1,開発環境の入手
http://www.digitalmars.com/ のDigital Mars C/C++ compiler for Win32 version 8.50.
をくりっくしてライセンスに同意。
Digital Mars C/C++ Compiler Version 8.50
をダウンロードして適当なところ(ここではD:\とする。)に展開。
2,パスを通す。
そのままでは実行できないので機械にコンパイラの場所を教える必要がある。
batファイルを作るのが簡単。
@set path=D:\dm850c\dm\bin;%path%
@start
この2行をエディタ(メモ帳など)でsetdmc.batとして保存。
3,コンパイル
main()
{
puts("
>>1 乙");
}
をsetdmc.batのあるフォルダでotu.cと名前をつけて保存。
でsetdmc.batを実行する。
コマンドプロンプトが出るので、
dmc -o -j -Bj otu.c
と入力してエンター。
link otu,,,user32+kernel32/noi;
と表示され、otu.exe,otu.map,otu.objなどが生成される。
4,実行
コマンドプロンプトにotuと入れてエンター。
>>1 乙
と出れば成功。
あとは勉強するのみ。
C言語自体は覚えることはそんなに多くない。
そのかわり膨大な関数とその組み合わせを覚える必要がある。
先ず覚えるべきは、
プリプロセッサ
ポインタ
構造体
の3つ。
関数はリファレンス見ながらでいい。使っていればできるようになる。
>>27 のプログラムはCではコンパイルできるがC++ではエラーになる。
このへんもC言語を覚えるとわかってくるようになる。
>>28 膨大な関数って……、Cはかなり少ないほうだぞ。
/* otl.h */ #ifndef OTL #define OTL #include <stdio.h> #include <stdlib.h> typedef char* otlstring; void STRINIT(otlstring *postr, int length) { *postr = malloc(length); } otlstring INPUT(otlstring ostr, int length) { return fgets(ostr, length-1, stdin); } int PRINT(otlstring ostr) { return fputs(ostr, stdout); } #endif
#include "otl.h" #define STRR 500 main() { otlstring massage; STRINIT(&massage, STRR); INPUT(massage, STRR); PRINT(massage); }
>>31-32 プリプロセッサとポインタの理解を深めるプログラムだ。
otl.hでは、
#ではじまる文
#ifnedf
#endif
#include
#define
がプリプロセッサだ。
プリプロセッサは、コンパイルに先立って行われるもので、
ローションを塗って街に出たあと、急に難易度が上がった気がする。
35 :
デフォルトの名無しさん :2007/12/24(月) 18:00:23
いまでも hello world を表示させる書籍あるかな
36 :
デフォルトの名無しさん :2007/12/24(月) 23:51:58
#クリトリス "otl.h" #define STRR 500 main(チンポコ) { otlstring massage; STRINIT(&massage, STRR); インサート(massage, オマンコ); PRINT(ザーメン); }
>>1 1.WindowsがインストールされてるPCのセットを買ってくる
2.VisualStudioの最新版を買ってきてインストールする
3.おめでとう、君はC言語を扱える環境を手に入れた
char kuritorisu(int i) { char child; child = 'h'; return child; } クリトリスに愛を送信するとHな子供が生まれるプログラム
AUTOとSTATIC 変数にはauto変数とstatic変数があります。 void aaa() { auto float orz=3; orz++; printf("%f\n", orz); } void bbb() { static float orz=3; orz++; printf("%f\n", orz); } main() { aaa();aaa();aaa(); bbb();bbb();bbb(); }
>>35 いまでもカーニハンとリッチーの晴久本持ってるよ。
当時は気にしてなかったけど3年で40刷まで増刷してるのな。
Win32API フリーの環境でWindowsのGUIを作るには、Win32APIを使う。 #include <windows.h> int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstt, LPSTR omanko, int sex) { MessageBox(NULL, "ちんちい", "エラーです。", MB_YESNO); } コンパイル時に user32.libをリンクする。 また-L/exet:nt/su:windows:4.0. がないとプロンプロが表示される。 dmc -o -j -Bj -WA *.c user32.lib -L/exet:nt/su:windows:4.0.
bccとgccとclのコマンドラインも載っけようぜ。
ポインタ ポインタは構造体と同列に語られることが多いが、それは、 ポインタが構造体と密接な菅家いにあるからだ。 次のプログラムを見てみよう。 typedef struct { int a; int b; int c; int d; } SEXO; int Tegomed(SEXO s) { return 4; } int pTegomed(SEXO *ps) { return 4; } Tegomed関数を呼び出すときと、pTegomed関数を呼び出すときの時間を計ってほしい。 明らかにpTegomed関数の方が速い。これがポインタを使う理由で亜tる。
変数とは、データを格納する、名前お持った場所である。 C言語では、以下のようにして実感することができる。 main() { static int b =4545; { int a; a = 072; printf("a=%d aの場所=%x\n", a, a); } }
昔作ったポインタのチラ裏 ここに置いてきますね -- -- -- char str[]="ABCDEFG";sizeof:8//文字(配)列 char *pstr=&str[0]; sizeof:4 //ポインタ char **ppstr=&pstr; sizeof:4 //ダブルポインタ typedef unsigned char u_char; u_char *memory; sizeof:4 //ポインタ -- -- -- - result - &str 0012FF78 str(s) ABCDEFG &pstr 0012FF74 pstr(x) 12ff78 &pstr 0012FF74 *pstr(c) A &ppstr 0012FF70 ppstr(x) 12ff74 &ppstr 0012FF70 *ppstr(s) ABCDEFG &ppstr 0012FF70 **ppstr(c) A memory=(u_char*)&memory &memory 0012FF6C memory(x) 12ff6c &memory 0012FF6C *memory(x) 6c 6c-ff-12- 0-74 -ff-12- 0-78-ff-12- 0-41-42-43-44- 45-46-47- 0-c0-ff-12- 0-59-14-40- 0- 1- 0- 0- 0- -- -- --
メモリ管理 C言語ではmallocという命令でメモリを確保する。 void wma2mp3(void) { short *mp3; short *wma; mp3 = malloc(8931); wma = malloc(893-110; /* mp3[0]からmp3[8930]までshort配列のように扱える。 */ mp3[4] = 0; mp3[801]=555; } main() { while(1) wma2mp3(); getchar(); }
>>46 上記のプログラムなぜかはコンパイルできない。
理由を書け。(配点5)
>>47 そこは、命令ではなく関数と言ってほしいな。
いくらなんでもひどすぎるコードだよな。
C言語はJAVAをエミュレートできる。 #include <stdio.h> typedef struct { int (*println)(const char *, ...); } OUT; typedef struct { OUT out; } SYSTEM; int main() { SYSTEM system; OUT out; out.println = printf; system.out = out; system.out.println("test\n"); }
printlnと主張するなら"test"にしろよ。
if文とgoto文 その1 C言語には、昔ながらのifとgotoをサポートしている。 if (条件式) goto ラベル1 ラベルは、:をつける。 main() { int s; s=getchar(); if (s == 'a' || s == 'o') goto HOG; exit(-5); HOG: putchar(++s); return 6001; }
54 :
デフォルトの名無しさん :2008/01/15(火) 10:51:27
やさしいC++―まずは「C言語」からはじめよう!! 米村 貴裕 という本があるのですが、「以下」と「未満」の使い方が間違っています。 (a<60)のあるところに、「aが60以下のときは...」と書いてますけど 「aが60未満」の間違いですよね?この本、ほとんどこんな感じで間違いまくり なんですけど、amazonのレビューで評価が凄く良くて買ってしまいました。 レビューで一つもこのことに触れず、星が5と4ばかりなのですが、これって 関係者が自ら書き込んだんでしょ?
初心者向けの本って初心者が書いているので、仕方ないんじゃないのかなぁ。
56 :
デフォルトの名無しさん :2008/01/15(火) 11:31:36
>>54 この本はあまりにひどすぎる。問題ですって問題出しといて答えが間違ってるし。
見た限り全部間違ってるから、作者は本気で知らなかったのか?
アマゾンも見てるといい加減だからな
58 :
デフォルトの名無しさん :2008/01/18(金) 18:39:53
俺のお薦め(初心者用) C言語 入門 本物志向が身に付く本 【技術評論社】 コンパイラとは何かから説明してるから初心者にお勧め 決して、この本一冊でC言語が理解できるわけではない。
本物志向って一体何?
60 :
58 :2008/01/18(金) 19:22:43
読んだ感想からいうと、本物志向ってのはただの売り文句 って感じ。ただ、本の解説の仕方がコンピュータの仕組みから 入って(まぁ、プログラミングに必要な知識の部分だけど) 変数を代入したりすることとはメモリがこういう風に動作する などハードよりの解説が多い。
本物志向とか言っておいて C++に移行させてC++本でも儲ける
APLではじめて Brainfuckにキャリアアップ C++で本格化して D信者となる Erlangが流行ったので乗り換えた。 でも仕事はFortranの保守。
Fどまりのアンタは一生童貞なのさ!
64 :
デフォルトの名無しさん :2008/01/21(月) 01:05:57
65 :
◆nullpop./c :2008/01/24(木) 10:11:44
変数 C言語にも型があり、BASICとさほど変わらない。 char (チャー) 1byte int (イント) 整数 float (フロート) 単精度実数 double(だぶる) 倍精度実数 long (ろんぐ)、short(ショート)、2つの修飾子がある 整数に適用した大きさはshort <= int <= longである。 long doubleと書けば拡張精度となる。
Cの絵本でも読んでおけ。
>>65 人に教えられるレベルじゃねーだろ、お前は
68 :
◆nullpop./c :2008/01/25(金) 09:11:51
>>1 そろそろわかってきただろうから練習してみよう。
問1
スタックを実装せよ。どのような型でも格納できるようにすること。
スタックサイズは可変=メモリの許す限りとする。
模範解答は明日。
がんばれ。
開発環境の構築 Hallo World 変数型 演算子 代入演算子 比較演算子 基本的な入出力 関数 プリプロセッサ 配列 ポインタ ポインタ渡し 参照渡し メモリの確保/解放 構造体 文字列 文字コード 文字入出力 ファイル入出力 多次元配列 マクロ 共用体/列挙体 コマンドライン引数 バブルソート FIFO FILO 文字列検索
>Hallo World 面白い
72 :
◆nullpop./c :2008/01/26(土) 08:29:26
>>1 おはよう。できたかな?
模範解答を示す。
長いので、スレをまたぐが。
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct tab_sex_stack{
char *data;
int size;
struct tab_sex_stack *tugi;
} STACK;
STACK *o721 = NULL;
73 :
◆nullpop./c :2008/01/26(土) 08:29:48
int pop(void *data){ STACK *sp; int size; if (data == NULL) return -4; if (o721 == NULL) { return 0; } size = o721->size; memcpy(data, o721->data,size); sp = o721->tugi; free(o721->data); free(o721); o721 = sp; return size; } int push(void *data, int size){ STACK *sp; if (data == NULL || size <= 0) return -4; sp = o721; o721 = malloc(sizeof(STACK)); if (o721 == NULL) return 0; o721->data = malloc(size); memcpy(o721->data, data, size); o721->size = size; o721->tugi = sp; return 32; }
74 :
◆nullpop./c :2008/01/26(土) 08:30:31
main(){ auto char eros[200]; int meko; int gane; DWORD timmer = GetTickCount(); push("aho", 4); push("baka", 5); gane = 0721; push(&gane, 4); pop(&meko); printf("%d\n\n", meko); pop(eros); puts(eros); pop(eros); puts(eros); pop(eros); puts(eros); /* EOF */
>>1 もう教えることはないだろう。
>>1 はプログラムを見せてくれなかったな。
自分のプログラムを他人に見せるのは恥ずかしいかもしれない。
とくにはじめたばかりなのでしょうがないが。
だが、他人に見てもらうこと、指摘されること、他人の目を意識することでプログラムは上達するぞ。
もっとも上達する方法は、漠然とCを覚えるのではなく、作りたい物を決めること。
そのために何が必要なのか考えれば、おのずと上達していくだろう。
あとは
>>1 しだいだ。がんばれ。
そして新しいパラダイムを築いてくれ。
8進定数を10進出力している馬鹿発見。
77 :
デフォルトの名無しさん :2008/01/27(日) 02:17:27
つぎは、 nullpop 君による、プログラム72 に出てくる型がいかに 65 の説明の通りか。 つまり BASIC とさほど変わってないかの説明です。
79 :
デフォルトの名無しさん :2008/01/27(日) 10:57:36
80 :
デフォルトの名無しさん :2008/01/27(日) 14:08:51
今からC言語覚えようってセンスがもう........
81 :
デフォルトの名無しさん :2008/01/27(日) 14:10:55
>>80 なにが?
汎用アセンラ覚えなきゃ組み込み系は仕事できませんが
そんなにアセンラず、落ち着いて書き込め。
84 :
デフォルトの名無しさん :2008/01/27(日) 14:48:34
>>82 ならなおさらC言語ができなきゃいけないだろ。
アセンブラの実物見たことないやつがしったかして邪魔スンナぼけ
アセンブラ必要か? 組み込み系でもいろいろあるからな。
今はもう組み込みでもCばっかりだな。 だが作法が他とは全然違う罠。
>>84 > ならなおさらC言語ができなきゃいけないだろ。
汎用アセンブラてCのことだが…
88 :
デフォルトの名無しさん :2008/01/27(日) 21:47:31
アセンブラとコンパイラの区別が付かない人は引っ込んでて
うわー
http://www.python.jp/doc/release/tut/node5.html たまたまpythonがインストールされてインタプリタ起動したんだけどすごいね。昔のN88Basicみたいに簡単に使える。
本当は>>>なんだけど書き込みでエラーになるんで削除。
C:\Airblade-1.3.2\python>python
Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
> 2+2
4
> (50-5*6)/4
5
> 7/3
2
> 7/-3
-3
> width = 20
> height = 5*9
> width * height
900
> x = y = z = 0 # x と y と z をゼロにする
> x
0
> 3 * 3.75 / 1.5
7.5
> 7.0 / 2
3.5
> word = 'Help' + 'A'
> word
'HelpA'
> word[0:2]
'He'
> word[2:4]
'lp'
>>90 だからなに?
余りに当たり前過ぎて欠伸が出てくるんだけど。
92 :
デフォルトの名無しさん :2008/01/28(月) 11:01:57
当たり前って言い方は詐欺的だろ。 確かにPythonを使うのは当たり前かもしれないが、Phthon使う前はなかなかない。 コマンド入力で答えが返るのはDOSプロンプトでもあるが、制約が多くて不自由だし。 スクリプトはどこにでもあるが、1行ずつ実行できるようなのはあまりない。 少なくとも3Dゲームがぐりぐり動くようなのは、ライブラリが優れてるのか知らないが見たことない。 Flashプレーヤーですら3Dっぽく見えても2次元動画だったりするし。 当たり前って言うならどんな環境を知ってるのか教えて欲しいね。
はぁ? MATLABにしろそのクローンのOctaveにしろ、インタラクティブな環境はご存じないのですか? それ自身がインタラクティブな環境で実装されている言語だって色々あるし。 それとも単に「Pythonすげー」って言いたいだけ?
やり取りがあまりにも高度すぎて眩暈がしてきたよ・・・ いちいち突っかかることなのか?
95 :
デフォルトの名無しさん :2008/01/28(月) 11:43:02
>"for"ループを使用することなくベクトルや行列の操作を行っている >これらの短所にも関わらず、MATLAB は依然多くの科学技術計算で用いられている。 すごいけど >完全な互換性や最新版のMATLABを得るためには、製品を購入する必要がある。 >結果的に、MATLABの利用者はベンダの囲い込みに属することとなる。 囲い込みしてるのが当たり前ってどういう神経してるんだか。 使う可能性が1%もないのに勉強しろって? 死ねば?
>>95 >はぁ? MATLABにしろそのクローンのOctaveにしろ、インタラクティブな環境はご存じないのですか?
「そのクローン」って、意味わかりませんでしたか?
97 :
デフォルトの名無しさん :2008/01/28(月) 11:46:17
馬鹿が居る。
100 :
デフォルトの名無しさん :2008/01/28(月) 18:53:38
総括すると、みんなCが大好きってことだな
喧嘩はやめようぜ。
ししょー
このスレおわったのか?
はじめて "hello world" が表示された時の感動を俺は忘れない
105 :
104 :2008/04/15(火) 22:31:50
ごめん忘れたみたい
106 :
104 :2008/04/17(木) 17:44:58
今少しだけ思い出した
107 :
デフォルトの名無しさん :2008/06/17(火) 00:12:01
はじめての言語は MSXのBASICと言うのは 俺のような30代・・・ Cといえばturbo C これも・・
日本語でおk
ファミコン世代 ファミリーBASICも30代
TurboCもいいけど一番お世話になったのはLSI-C試食版
同じくだ。 PC98時代(DOS)からWindows98時代までお世話になったw
学校では98でturboCしたが メモリに直に数値入れるイメージしかない 通信といえばBBSの時代・・・
114 :
デフォルトの名無しさん :2008/09/01(月) 03:35:35
ほしゅ
XCやGCCで育ったのも30代。 無料でついてきたマクロアセンブラで遊んだのも30代。
俺漏れも マニュアル読み尽くしてreadとfreadは機能がだぶってるじゃんか とかいうあたりからunixへ入っていった あとkmyaccとか2005年あたりにさりげなく バージョンアップしてんの知ってた?
ヤック・デカルチャー?
118 :
デフォルトの名無しさん :2008/09/02(火) 18:33:52
↑ そのTV・劇場版マクロスを 視聴した小学生も今は30代
Cスレにぴったりの言葉を思いついた 「Yacc de Culture.」 (訳: 構文解析やらないか)
試食版じゃないLSI-Cを使ってると込みたことある人はどんだけいるのだろう。
はいよ。使ってるところを見たというより、使ってた。 尤も、製品買ったのにSmallモデルしか使った記憶が無い罠。 まぁ、試食版には無いライブラリのソースは見られたけど。
そだね。とりあえずvoltaileにでもなってもらおか
124 :
デフォルトの名無しさん :2008/11/28(金) 19:12:18
BasicMagazineの投稿に憧れ マシン語なら日高の本を買い ・ ・ ・ いまどきC言語はnet検索で終了?
●●● ● ● ● ● ● ● ●●●
誰かさ、オンラインコンパイラーってやつを作ってみてよ。 オンラインで YoutubeのSWFを音声やMPEGに変換するサイトがあるじゃん。 それと同じように Cソースを 実行形式に自動変換してくれるサイト作ってよ。
127 :
デフォルトの名無しさん :2008/11/29(土) 23:35:42
C言語での「ウィンドウ作成」ってできるんですか? できればサンプルソース書いていただきたいのですが。 ボーランドでソース書いてもエラー出て まいっちんぐマチコ先生でつ。
まいっちんぐマチコ これ知っている人が40代以上である確率は非常に高いと 思われ。
>>124 その心に燃える闘魂が宿っていればnet検索で何も問題はない。
>>127 できるよ
OSは何?
winだったらAPI叩けばいいし、UNIX系だったら、X motif openwin lesstif gtk とか
いやーん
132 :
デフォルトの名無しさん :2008/12/05(金) 03:51:54
>>130 OSはXPなんですが、API叩くというのは?(すみませんチョwww初心者なんで)
そういう関数ってかインターフェースがあるんですか?
ほらよ! #include <windows.h> main(){ WNDCLASS wcex={0,DefWindowProc,0,0,0,0,0,0,0," "}; RegisterClass(&wcex); ShowWindow(CreateWindow(" ",0,1,300,300,200,200,0,0,0,0),1); Sleep(3000); }
134 :
デフォルトの名無しさん :2008/12/05(金) 04:08:25
>>133 おぉ~ネ申よ!
解決の糸口が見えてきたよ。
解決しても また次の問題をかかえてくるに 8000ペリカ
>>132 ペゾルドのProgramming WindowsなどのまともなWindowsプログラミングの入門書読め。
137 :
デフォルトの名無しさん :2008/12/06(土) 05:50:47
こんにちわ 世界!
138 :
デフォルトの名無しさん :2008/12/06(土) 10:18:13
さようなら 世界!
139 :
デフォルトの名無しさん :2008/12/06(土) 10:24:13
スクールデイズ 最終話か!
printf("Nice boat.\n");
中に誰もいませんよ!
#ifndef OTL #define OTL #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char *str; ulong length; } OTLSTRING; #endif #define TEST1 main() { OTLSTRING orz; } #endif
143 :
デフォルトの名無しさん :2008/12/15(月) 23:58:45
なにこのゆとりスレ・・・
144 :
デフォルトの名無しさん :2008/12/18(木) 03:02:36
ゆっとりしていってね!
145 :
デフォルトの名無しさん :2008/12/18(木) 21:05:26
BASIC→マシン語 Cのはいる余地なしなのが30代と思ったが・・そうでもないのか
C使えなかったんですか?貧乏だったんですね。
147 :
デフォルトの名無しさん :2008/12/19(金) 21:00:22
パソコンは8bitで過去の栄光のmkⅡSR以降だったんです。 ガッコで98FAでturboCを初めてつかったんです。 そのときの参考書はお約束の Hello world の表示からポインタの説明までだったんです。 インターネットが流行る前のBBSの時代だったんです。
ひとついえるのは 汎用性のないプログラムはゴミ
149 :
デフォルトの名無しさん :2008/12/20(土) 07:18:36
汎用性のある会社員でもゴミになる時代
150 :
デフォルトの名無しさん :2008/12/21(日) 10:19:49
金もうかるシステムをつくる経営者にならんとね
最近「○○言語やりたいんですが、何をすれば?」みたいなのが多い。 逆だろ? 「××したいんだけど、○○言語ではどうすればいい?」 と聞くべきだろ? 何で自分がする(したい)事を他人から指示されなきゃならんの? 目的があれば、手段(言語)なんてなんでもいいよな? と思うMZ80B世代のおっさんでした。
152 :
デフォルトの名無しさん :2009/02/14(土) 17:21:06
素人か上級釣り士ってだけのこと 子供は保護されてっから無意識に自分を中心にして回ってると思いがちなんだよ 掲示板も自分のため、ホームページのじゃんじゃんカウンタ回る、最強、天才、うんこちんこ大好き
そしてまんこも
C言語ができることがトレンディだった時代も・・・あったと思う 二十年くらい前に
for文 (1) 繰り返しにはfor文を使う。 for(初期化;条件;処理){ ループ処理 } for (i=0;i<10:i=i+1){ 処理 } これが基本形だ。 for(i=0,j=5,k=20;l==5;i+=j); このような書き方もできる
for文 (2) 繰り返し途中に抜ける場合、 continueとbreakの12つがある・ continueはforの頭にもどりbreakはループを抜ける。 for(c=0;c<20;c++){ printf("%d\r\n", c); if (c == 10) { c = 15; continue; } if (c == 18) break; }
for文 (3) 無限ループはwhile厨とfor厨、goto厨がいる。 私はわかりやすさの面からforを推奨する for(;;) { 無限ループ } while(0==0) { 無限ループ } LOOPS: 無限ループ goto LOOPS;
文字列処理(1/3) Cのもじれつはナル文字 (N88BASICでいえばCHR$(0)) で終わるbyte型の配列だ。 "sex"はs,e,x,\0の4バイトになる。 文字列処理はsprintf関数を使う。 printfの出先を文字列のアドレスにしただけ。 char nakano_minako[666]; char *ppp; ppp = &0[nakano_minako]; sprintf(nakano_minako, "sex is sex"); puts(ppp);
文字列処理(2/3) 数値変換は atoi,atof,atolを使うN88BAICのVAL関数とおなじ。 char timer_sex[] = "05:10:12"; int hh,mm,ss; hh = atoi(&0[timer_sex]); mm = atoi(&3[timer_sex]); ss = atoi(&6[timer_sex]); printf("%d - %d - %d \b\r\n\t", hh,mm,ss);
文字列処理(3/3) 文字列は配列だから、簡単に暗号化できる char sex[] = "sex for your 072"; while (*sex++) { *sex += 22; }
関数ポインタ(1/3) C言語は関数ポインタを使って処理を読みやすくできる typedef int (*type_is_sex)(int sex, int o72); type_is_sex sex[3]; sex[0] = printf; sex[1] = sprintf; sex[2] = fprintf;
staticの重要性(1/1) C言語はstaticとexternという重要なキワードが存在する グロバル変数にstatic int g_sex; としあ場合、ほかのファイルからは見えなくなる 関数ないで int f(void *d){ static s_sm; ... } とした場合、関数を抜けても値を保持するようになる。 externはほかのファイルに変数がありますよを意味する。 -------sex1.c------------- int g_sex; -------------------------- -------sex2.c------------- extern int g_sex; printf("%d",g_sex); ------------------------- externはあくまで外部にあることを意味するので、 多重適宜してはいけない
プリプロセッサ (1/5) #のある命令がいくつかある。 #include #define #if #else #endif #pragma これらはプリプロセッサといい、コンパイル前に行われる。 #includeは指定ファイルに置換される #defineは単語置き換えを行う。 #if,else,endifは条件によってこんぱいるを帰る #pragmaは重要だ。
プリプロセッサ (2/5) #pragmaは重要だ。 #pragma onceとすることで多重インクルードを防ぐ。 ------------monko.h------------ typedef int sex_i; ------------------------------- もし、このmonko.hを複数のファイルが読んだら、 typedef多重のエラーになる。 ここで ------------monko.h------------ #pragma once typedef int sex_i; ------------------------------- とすれば、1階しか呼ばれない。
プリプロセッサ (3/5) #pragmaは重要だ。 #pragma packを使うことで構造体のあラインを調整できる。 #pragma pack(1)とすれば 以降の構造体が1バイトであラインされる(パデングなし) #pragma pack(4)としたばあい、少々複雑だ。 typedef struct { int x; char c1; char c2; } SEXOS; printf(%d", sizeof SEXOS); 何バイトだろうか? 12バイトにはならず8バイトになる。
167 :
◆nullpop./c :2009/05/05(火) 12:02:32
プリプロセッサ (4/5) プリプロセッサによってコメントをネストできる #ifdef SEC #ifdef SEV /* */ #else #endif #endif
プリプロセッサ (5/5) ##演算子 #define pasta(front,end) front ## end pasta(name,1)でname,1という文字記号が作られる
ポインタ渡し?参照渡し?(1/2) Cの関数呼出はすべて値私だ。 引数はコピーを受け取り、元の値には影響しない #define function int function fera(int longchinko){ longchinko = 17; } function main(){ short hokei=4; fera(hokei); printf("%d",hokei); } アドレスを渡すことで。引数の指す値を変更でくいる #define function int function fera(int *longchinko){ *longchinko = 17; } function main(){ short hokei=4; fera(&hokei); printf("%d",hokei); } Cには参照渡しは無い。 だから前述のポインタを使った参照渡しもどきしかできぬ。
ポインタ渡し?参照渡し?(2/2) 引数でポインタそのものを変更するには ポインタのポインタを使う void mallocpp(char *pp){ *pp = malloc(INT_MAX); } main(){ char *po; mallocpp(&po); stlcpy(po, "sex and them!"); free(po);po = 0; }
コマンドライン引数(1/1) ffmpegのようなソフトウェアはコマンドライン引数を受け付けておる ffmpeg -i "千と千尋の神隠し.vob" -map 0.5:0.2 -vcodec libxvid -qscale 4 -acodec libmp3lame -ab 192k -ac 2 sex.avi main関数は2つの引数をとることができ、 次のように定義すればコマンドライン引数を取得できる。 main(int chokin, char **cap) { while(chokin--) puts(cap[chokin]); }
FIFO、FILO(1/2) FIFO,FILOはデータ構造。 First In Fast Out、割き入れ先出し First In Last Out、先入れ後出し のことだ。 typedef struct { void (*pfin)(int); int (*pfout)(void); } CHINPO_IO; //FIFO function int fifobuf[100]; int fifoptr = fifobuf; void fifoin(int i){ *fifoptr++; } int fifoout(void){ return *fifoptr--; } main(){ CHINPO_IO ci[2]; ci[0].pfin = fifoin; ci[1].pfout = fifoout; ci[0].pfin(1);ci[0].pfin(10);ci[0].pfin(100); printf("%d %d %d\n", ci[0].pfout(), ci[0].pfout(), ci[0].pfout()); }
173 :
デフォルトの名無しさん :2009/05/07(木) 14:52:04
ありがとう
文字列検索(1/4) 文字列検索にはstrstr関数を使う char tx[] = "sex if"; if (strstr(sex, " i")){ みつかった }else{ ない } Boyer-Mooer法については後述する
176 :
◆nullpop./c :2009/05/07(木) 23:33:34
文字列検索(2/4) /*奥村晴彦先生のを最適化*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h> int sweets(unsigned char *text, unsigned char *pattern){ int i, j, k, len; static int skip[UCHAR_MAX + 1]; unsigned char c, tail; if ((len = strlen(pattern)) == 0) return -1; tail = pattern[len-1]; if (len == 1) { if ((i = (int)strchr(text, tail)) != 0) return i-(int)text; } else { memset(skip, len, UCHAR_MAX+1); for (i = 0; i < len - 1; i++) skip[pattern[i]] = len - 1 - i; while ((c = text[i]) != 0) { if (c == tail) { j = len - 1; k = i; while (pattern[--j] == text[--k]) if (j == 0) return k; } i += skip[c]; } } return -1; }
177 :
デフォルトの名無しさん :2009/05/08(金) 00:38:07
あーセックスしてー
ーてしスクッセーあ
make(1/3) たくさんソースファイル尾つくって、毎回それを全部コンパイルするのは無駄だ。 変更したソースだけをコンパイルすれば効率がいい dmc a.c b.c c.c この場合a.c b.c c.cがコンパイルされa.obj,b.obj,c.objが作られる。 -------MAKEFILE--------- SEX : a.c b.c c.c (tab)dmc a.c b.c c.c --------------------------- MAKEFILEというファイル名で (tab)はTAB1こ。 これをmakeすると…
>>177-178 void rev(char *x,char*m, short s)
{
long bin=0;
long sm=strlen(x);
m[sm]=0;
for(;bin<sm;bin+=2){
m[bin]=x[sm-bin-2];
m[bin+1]=x[sm-bin-1];
}
}
main(){
char sex[] = "あーセックスしてー";
static char manko[64];
rev(sex,manko, 2);
puts(manko);
}
181 :
◆nullpop./c :2009/05/10(日) 00:46:00
/* ライブラリ関数[1] ファイル関係は以下のようにする */ #include <stdio.h> typedef struct { FILE *sex; char sex2p[801]; FILE *(*open)(const char *n,const char*m); int (*close)(FILE*); char *(*gets)(char*,int n,FILE*); } SEX_IO_VER; SEX_IO_VER sit = {NULL,"sex",fopen,fclose,fgets}; main(int argc, char **argv) { static int line; sit.sex = sit.open(argv[1], "r"); while (sit.gets(sit.sex2p,800,sit.sex)) printf("line%4d -- %s",line++,sit.sex2p); sit.close(sit.sex); }
C言語は実際にみてみればいいですねwこの前sakuyawwwっていうやつと知恵袋で書き込みしあったので見てみてください。 メモリには1バイト(8ビット)づつ番地が割り振られている。 1番地=1バイト=8ビット=256通りの情報 100番地に154を置くということは、100番地のメモリを10011010にするということ。 このことをある言葉で書いてみてください。 ある言葉はCですねw Cで書いてみると size of char = 1 バイト size of short = 2 バイト size of int = 4 バイト size of unsigned int = 4 バイト size of float = 4 バイト size of double = 8 バイト size of long double = 12 バイト size of size_t = 4 バイト これでおkですw
ハッキングとクラッキングの違いについて、ハッカーは絶対に自分からハッキングしません。クラッカーどもはしますがね! ハッカーは日本に何人いるか?については、具体的には分かりませんが、大体数百人ぐらいですね・・・自分がしっている人数でも、50人ぐらいしか知りません。 001b7 f2 0f 2c d3 cvttsd2si edx, xmm3はなんですか?について、自分が今まででそういうソフトは知りません。もしかしたら全然関係ないものかもしれないし、もしかしたら、本当に関係があるかもしれません。 ハッキングは防ぐことができますか?について、ここではハッキングではないので、後からは「クラッキング」と称します。 クラッカーはまあよほど物好きでなかったら、一般の人のPCやセキリュティに進入しません。まあ、一応クラッキングされたとして、 一応どんなPCにも独特のセキリュティが入っています。しかし、どんなセキリュティも30分ほどしか持たないといわれています。 なので、セキリュティへの進入を感知すると、しっかりしたPCだと警告がでるので、すぐにわかります。すると自動的にシャットダウンするなど色々な動作でクラッキングを防ぐ行動をします。 ハッキングのやり方は 自分のPC・セキリュティへの進入を感知→相手のプロダクトID(プロダクトキーでも可)→相手のセキリュティの突破・破壊(別に破壊しなくてもいいですが、したい場合はしちゃってください!)→後は自分の好きなようにする。 一応クラッキングについても教えますね。 まあ、専門ではないので間違っている場合があります。 相手のプロダクトID(IPアドレスがあればもっと簡単になります。)→相手のセキリュティの突破(破壊は絶対にしないでください。すぐにばれます。)→後は自分の好きなようにする。 まあ、すんごく、超簡単に言ってみるとこんな感じですね。 PCにアクセスとは何?については 多少間違っていますね。アクセスはハッキング(クラッキング)半分合っていて半分間違っています。自分のPCから相手のPCへのアクセスは相手も同意しているのが絶対です。それ以前にばれています。 あと、この回答は質問に答えただけなので、ベストアンサーにはしなくてもいいです。
184 :
◆nullpop./c :2009/05/11(月) 21:49:51
>>182-183 ネタなのかマジなのかわからんが。。。。。
int,unsigned intはコンパイラ依存(2byte,4byteどちらか)
001b7 f2 0f 2c d3 cvttsd2si edx, xmm3
左が機械語、右が対応するアセンブリ言語
>>182 >メモリには1バイト(8ビット)づつ番地が割り振られている。
×
そうとは限らない。
>1番地=1バイト=8ビット=256通りの情報
×
そうとは限らない。
186 :
◆nullpop./c :2009/05/23(土) 09:29:12
演算子(1/5) Cは演算子がおっぱいある 優先順位と結合規則について説明しよう 優先順位が高いものから演算されます s+e*xのときにe*xをしてそれにsを足すといったようになる 優先順位が同じものが複数有る場合、結合規則が適用される a+u+m-s+h +-は結合規則が左から右になっているから ((a+u)+m)... というように演算される
187 :
◆nullpop./c :2009/05/23(土) 09:31:52
演算子(2/5) 配列の[]は注意が必要だ sex[nakadasi] これは *(sex+nakadasi) に変換される だからa[5]と5[a]は同等だ
188 :
◆nullpop./c :2009/05/23(土) 09:34:06
演算子(3/5) sizeof演算子は2つの使い方がある main(){ short sex; printf("%d" "-----" "%d" , sizeof(long), sizeof sex); }
189 :
◆nullpop./c :2009/06/06(土) 14:40:30
質問ある???
191 :
デフォルトの名無しさん :2009/06/09(火) 01:05:57
何かボタンを押したら・・・みないたのをやりたいんだけど scanf()だとEnter押さなきゃ入ってくれないじゃない? どうすればEnter以外のボタンでもキー入力を取得できるの?
標準のCライブラリでは無理。 処理系依存では、kbhit とかあるけど、最近のウィンドウズでも使えるんだっけ?
VCだと_kbhitが一応用意されてるな 使った事ないけど
ほらよ!!! #include <windows.h> #include <conio.h> #include <stdio.h> void main(){ printf("Z か A "); getch(); if( GetKeyState( 0x5A ) & 0x80 ){MessageBox( 0, "test" , "ぜっとー。。" , 0);} if( GetKeyState( 0x41 ) & 0x80 ){MessageBox( 0, "test" , "えーぼたんー" , 0);} }
195 :
◆nullpop./c :2009/09/10(木) 19:13:43
>>194 まず、Cの基礎的な知識を勉強したほうが、いい。
e6.oHu1j.o でググると、しょうもないもんばっかり出てくるよ
トリ付きの98%はゴミ
198 :
◆nullpop./c :2009/09/13(日) 18:29:20
>>194 修正
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm")
static char messagetable[][100] = {"エラーです", "ぜっとー。。", "えーぼたんー", };
void PrintMessage(int i){
HWND hwnd;
int table_id = 0;
hwnd = GetForegroundWindow();
if( GetKeyState( 'Z' ) & 0x80 ) table_id = 1;
if( GetKeyState( 'A' ) & 0x80 ) table_id = 2;
if(table_id !=0) {
MessageBox( hwnd, "test" , messagetable[table_id] , MB_ABORTRETRYIGNORE);
} else {
MCI_OPEN_PARMS mop;
mop.lpstrDeviceType = "cdaudio";
mciSendCommand((DWORD_PTR)NULL, MCI_OPEN, MCI_OPEN_TYPE, (DWORD_PTR)&mop);
mciSendCommand(mop.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, (DWORD_PTR)NULL);
}
}
int main(void){
int i;
printf("Z か A ");
i = getch();
PrintMessage(i);
return EXIT_SUCCESS;
}
199 :
デフォルトの名無しさん :2009/09/14(月) 19:59:25
適切なスレがあったら是非誘導お願いします。 C言語用の、データ構造やアルゴリズムのライブラリってありませんか? C++ならばSTLやBoostがありますが、Cのためのそれらのようなものを探しています。 できればそれなりにユーザーもいて開発も続いているものが...
200 :
◆nullpop./c :2009/09/14(月) 20:35:09
>>200 ありがとうございます。
確かに良いとは思うんですが、
できればLinuxなどでバイナリが配布されている程度に
メジャーでユーザー層が厚いものが・・・
>>200 つ[Numerical Recipies]
202s/200/201/
204 :
デフォルトの名無しさん :2009/09/17(木) 22:47:59
入門書を・・・・買えばいいと思うよ
206 :
デフォルトの名無しさん :2009/09/23(水) 20:17:28
C 言語を少し遣りたいのですが レス 返せる方居りますか?
207 :
デフォルトの名無しさん :2009/09/23(水) 20:26:43
初歩的な質問で申し訳ないのですが? 決まった言語で在れば compiler は分かるのですが C 言語での compiler と云うのが思い当たらないのです… C 言語で compiler 処理はどの様に処理結果を出せば良いのでしょうか? レス が無かったら悲しく クグル 事にします…
おりますが、C言語は少しやった程度でどうにかなるようなものではありません 本人の適性や学習ペースや目的にもよるものの、数ヶ月くらいは覚悟しましょう
210 :
デフォルトの名無しさん :2009/09/23(水) 20:31:55
211 :
デフォルトの名無しさん :2009/09/23(水) 20:33:41
>>209 gcc 系統の install はして居ります
212 :
デフォルトの名無しさん :2009/09/23(水) 20:40:11
これだけで終わるのでしょうか…
>>210 ターミナルを起動して
gcc filename.c
のように打てば、その filename.c がコンパイルされて a.out という実行ファイルが出来るので、
./a.out
と打てば実行される
214 :
デフォルトの名無しさん :2009/09/23(水) 20:50:23
>>209 以前は Linux でしたが?
多様性を考え Mac に移行した訳です…
個人で調べた結果 BSD 系程は command の充実は在りませんが?
自宅で BSD server を構築するのは
server 管理者の cost も負わなくては成らないので Mac と云う事です
215 :
デフォルトの名無しさん :2009/09/23(水) 20:55:38
>>213 助かります
処理結果をだすと云う表明的な文献を目にしないので…
216 :
デフォルトの名無しさん :2009/09/23(水) 21:06:43
>>213 取り敢えず C source の例は少し在るので
compile 処理結果を読める様になる事から始めます
また お願いします
お前ゲームプログラムスレにいたキチガイだろwww
>以前は Linux でしたが? >個人で調べた結果 BSD 系程は command の充実は在りませんが? 何で質問しているの? 自分のことも判らないほど馬鹿なの?
221 :
◆nullpop./c :2010/05/03(月) 20:06:36
int i = 10; int * p = &i;//int型ポインタpにiのアドレスを代入する 簡単。 char str1[] = "abcde"; char * str2 = "abcde"; 上と下は同じでどっちを使ってもいい。
222 :
◆nullpop./c :2010/05/03(月) 20:10:42
証明 int _cdecl main(void){ char str1[] = "abcde"; char * str2 = "abcde"; puts(str1);puts(str2);//abcdeabcde if (strlen(str1) ==strlen(str2)) puts("str1 str2 is same!"): str2=str1; printf("%c", 2[str2]);//c return 0; }
224 :
◆nullpop./c :2010/05/03(月) 23:39:41
マジにネタレスご苦労
> char str1[] = "abcde"; > char * str2 = "abcde"; > 上と下は同じでどっちを使ってもいい。 以下の実行結果を検証してみること。 int main(){ char str1[] = "abcde"; char * str2 = "abcde"; printf("%d\n", sizeof(str1)); printf("%d\n", sizeof(str2)); return 0; }
228 :
◆nullpop./c :2010/05/04(火) 05:47:29
>>227 爆笑、お前面白すぎ、
エンタに出てる芸人以上じゃね?
久々にわらかしてもらったわw
>>222 >printf("%c", 2[str2]);//c
なんでインデックスと配列識別子が逆なんだ…
>>229 x[i] は *(x + i) のシンタックスシュガーなので、逆に書いても問題ない。
が、それを本当に逆に書くのは素人がやりがちな、稚拙な遊び。
玄人はやらない。
MOVE.L D0,2(A0) こんな形に近くて美しく見えなくもない。
アセンブラじゃなくてC言語をやりたいんですが
はい
はい
>>230 ㌧くす。ポインタ操作ですな
勉強になりました。感謝
236 :
デフォルトの名無しさん :2010/06/02(水) 17:54:13
教えてください。 gccで画面に直線描くのはどうやるのですか。 私は、今春定年退職した暇人で、c言語入門者です。 よろしくお願いします。
環境による 共通のやり方は無い
>>226 亀レスになるが俺もカッコ付けてるわ
型名と識別子のどちらでもコンパイル通るから何も考えなくていい
239 :
デフォルトの名無しさん :2010/06/03(木) 08:28:30
>>237 ありがとうございます。
簡単には出来ないようで、初心者には無理ですね。
別のC言語をあたってみます。
括弧つけたほうが視認性が上がると思ってる場合は無駄でもつけてる 三項演算子とかreturnとか
returnに括弧って、タイプミスしたときに別名の関数と誤認されるからしないほうがいいって言われた。
sizeof() は誤認されないか?
sizeof も基本はいらないけど、どうしても必要な場合が多いからなあ
244 :
デフォルトの名無しさん :2010/08/26(木) 16:58:39
sizeof の括弧は要る場合の方が多いだろ
246 :
デフォルトの名無しさん :2010/09/05(日) 03:40:34
皆さんこんにちわ!C言語初心者です。よろしくお願いします。いきなりの質問で すみません!C言語標準ライブラリィ関数を例題を示して説明している本は何かあり ますか?教えてください。
>>246 辞書的な本があったとは思うのだけど、例文が余り適切ではなかった記憶が。
暇と金があれば書かないでもないのだけれど、どこぞの出版社が乗ってくれんもんかのう。
標準ライブラリすべてを網羅しているとなると、H&Sしかないのでは? というか、K&Rで不満なら、H&Sしかないような気がする。 あとはもう少し分野を特定してくれれば、適切な本があるかも。
C言語ならオレに聞けPart74 こちらに引っ越しました。
250 :
デフォルトの名無しさん :2011/01/23(日) 19:37:49
すいません。コンパイルしようと思ったらvcvers32が外部と内部で実行できません。って 出てきたんですけど・・・・どうすればいいんですか?
諦める
252 :
◆nullpop./c :2011/01/27(木) 20:01:49
誰か構ってくれ~ ゚∩ :ノノ ゚ し′ ,,------ 、 ノノ ∪ ∩ /: ____▽,,,,,,_ヽ 。:∪・ ⊂ヽ ノノ :∩ } i:ェェヮi ト.ェェ:-i { /⌒Y⌒\ プ :):) じ :ノノ 。 ヾ::/イ__l丶 r'1ノ ノ ) じ :∩ 。 ( ( .}::l: ゝ--イ l:: {^\ビチグソ | . ヽヽ ヽj ト!;_`二´_,,;!イ| | ノ :| ∩ じ | |__三___| |_/| | ノノ ∩ :∩ | | ヽ| ト' | |/^ヽ じ :ノノ ∵ :ヽヽ | | | |_/ ヽ__人_ノ ∪ し′ ⊆, っ とーっ
253 :
◆nullpop./c :2011/05/03(火) 18:33:18.02
コンパイラ(1/4) コンパイラは最適化をかけることができ -O1 -O2 -O3などでその意味あ変える。 -O1 速度 -O2 最適 -O3 強すぎ 最適化はループ内定数の外し 計算の定数化 無駄な関数の削除 を行う
2011年になっても未だにJAVA使い続けてる奴ってさ 仕事で仕方なくならわかるけど 家でもJAVAやってるなら本当にバカだよね。哀れ 死ねゴミ
255 :
◆nullpop./c :2011/07/03(日) 22:54:55.93
↑ 言語厨って哀れだな
JavaScriptをやってる奴も市ねゴミなんだな
"0123456789abcdef"[ index ] はたまにやる
#define ARRAY_SIZE 8 #include <stdio.h> int main(int argc, char *argv[]) { char a; int mask, i; int c[ARRAY_SIZE] = {128, 64, 32, 16, 8, 4, 2, 1}; switch(argc) { case 2: a = *argv[1]; printf("%02Xh\n", a); break; default: fprintf(stderr, "bits a\n"); exit(0); } for(i = 0; i < ARRAY_SIZE; i++) { mask = c[i]; if( (a & mask) == mask ) { printf("1"); } else { printf("0"); } } return 0; }
>>259 #include <stdlib.h>を追加
D:\work>bits "&" 26h 00100110
char a[6]; a[i]のアドレスは、a + i a[i] ↓ *( a + i ) char a[6][6]; a[i][j]のアドレスは、*( a + i ) + j a[i][j] ↓ *( a[i] + j ) ↓ *( *(a + i) + j )
j[i[a]]
#include <stdio.h> int main(void) { typedef int * INT_POINTER; INT_POINTER a, b; int m, n; a = &m; b = &n; *a = 2; *b = 1000; printf("%d\n%d\n", m, n); return 0; }
#define BINARY_1 1 #define BINARY_10 2 #define BINARY_100 4 #define BINARY_1000 8 #include <stdio.h> int main(void) { const int SHIFT_COUNT = 31; int count, i, msb; int e = 0x00000001; int test = BINARY_10 | BINARY_100 | BINARY_1000; /* 00001110b */ for(i = 0; i < SHIFT_COUNT; i++) { e <<= 1; } for(count = 0, i = 0; i < SHIFT_COUNT; i++) { if(test & e) { count += 1; } test <<= 1; } printf("%d\n", count); return 0; } /* C:\work>shiftand 3 */
いろいろまちがえた
#define BINARY_1 1 #define BINARY_10 2 #define BINARY_100 4 #define BINARY_1000 8 #include <stdio.h> int main(void) { const int SHIFT_COUNT = 31; int count, i; int e = 0x00000001; int test = BINARY_1 | BINARY_1000; /* 00001001b */ for(i = 0; i < SHIFT_COUNT; i++) { e <<= 1; } for(count = 0, i = 0; i < SHIFT_COUNT + 1; i++) { /* 32 */ if(test & e) { count += 1; } test <<= 1; } printf("%d\n", count); return 0; } /* C:\work>shiftand 2 */
31ビットならできた
#define BINARY_1 1 #define BINARY_10 2 #define BINARY_100 4 #define BINARY_1000 8 #include <stdio.h> int main(void) { const int SHIFT_COUNT = 30; int count, i, e = 0x00000001; int test = BINARY_1 | BINARY_100 | BINARY_1000; /* 00001101b */ int repetition = SHIFT_COUNT + 1; for(i = 0; i < SHIFT_COUNT; i++) { e <<= 1; } if(e < 0) { printf("e = %d\n", e); return 1; } for(count = 0, i = 0; i < repetition; i++) { if(test & e) { count += 1; } e >>= 1; } printf("%d\n", count); return 0; }