C言語なら俺に聞け 149

■ このスレッドは過去ログ倉庫に格納されています
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT0
!extend:checked:vvvvv:1000:512

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/10/29(月) 21:37:04.36ID:l03/lfXna
0x99b9e4313e3e
2018/10/30(火) 23:57:20.35ID:EION13qUM
自分を賢いと思っている馬鹿は
周りが自分をどう見ているかも
相手がどのレベルにいるのかも
なぜ自分が放置されてるのかも
何一つ知らない
2018/11/01(木) 16:13:41.13ID:upF+pHX50
musl-libcみたいに,特定のOSのプロジェクトではないPOSIXユーティリティの実装ってありますかね。
2018/11/01(木) 17:07:48.90ID:g+DLXddba
NewLibとかあったね
2018/11/03(土) 10:27:59.63ID:gIO4YTzK0
strtok_sを4変数にするとエラーになるんですけどどうしたらいいですか?
strmaxがある説明と無い説明があってわからないです。
2018/11/03(土) 11:28:06.76ID:hj5IrB61M
>>6
msvcのstrtok_sは非標準だから、_MSC_VERとかが定義されてるかどうかで呼び分けるしかないね。
あんまり覚えてないけどmsvcバージョンのほうが先にあった気がするから、iso/iecが悪い気がする。(間違ってるかも)
まあmsが切り替えスイッチを用意してくれればよいのだけど。
2018/11/07(水) 08:24:14.69ID:60G+FgCT0
>>7
よくわからないのでstrtokを使いました。
2018/11/07(水) 16:09:41.16ID:39tnP8GCx
ちょっとお知恵を拝借。

符号付き14ビットの整数があるとき(14ビットのMSBが符号ビット)、その値を符号付き16ビット値に拡張するうまいやり方はないでしょうか?
拡張後も符号や数値自体は変化なしです。
例えば2進で
10 1010 1010 1010
という符号付き14ビット値があった時、
1110 1010 1010 1010
のように変換したい。

14ビット値を16ビット符号付き変数に入れて左に2ビット論理シフトし、さらに右に2ビット算術シフトすれば実現できるのですが、何となく気持ち悪くて。
サクッとエレガントな方法はないでしょうか?
2018/11/07(水) 16:25:54.26ID:Gtw+mwj/H
>>9
シフトが一番エレガント。
2018/11/07(水) 18:02:56.37ID:d49i6th8M
>>9
2の補数表現として…
普通に14bit目が1なら0xc000とorするだけじゃないの?
12デフォルトの名無しさん (アウアウウー Sac7-AdN2)
垢版 |
2018/11/07(水) 18:16:05.56ID:bimd4khFa
もはや答えが出切ったと思うので斜め上からの回答でも書いておくか。

回答

int型が14ビットの整数型になっているCコンパイラを使う。
もちろんchar型は7ビット。
CPUは1バイトが7ビットである。
2018/11/07(水) 19:11:16.88ID:d49i6th8M
それ16bitの結果得るのが面倒なだけだろ
もう少し面白い回答頼むわ
2018/11/07(水) 19:12:35.33ID:xr+D7aWAM
皆様回答ありがとうございます。
今回はビットシフト方式で行こうと思います。

>>12
使ってるCPUとコンパイラがマイナーな、ある意味純粋な16ビット環境で、sizeof(char)もsizeof(short)も1を返し、sizeof(long)は2を返すような特殊な環境なので7ビットマイコンではありません。
2018/11/07(水) 19:46:07.55ID:SCUqGzCI0
intが14ビット
そんな処理系あるの?
16デフォルトの名無しさん (アウアウウー Sac7-AdN2)
垢版 |
2018/11/07(水) 20:47:19.69ID:bimd4khFa
>>15
多分ない。
しかし1バイトが6ビットとか9ビットのマシンはあったようだよ。
https://qiita.com/yaju/items/c5da6df2221d5c3611e0
2018/11/07(水) 20:49:47.59ID:YuYLxFMn0
60〜70年代メインフレームは百花繚乱だったなぁ

ttps://en.wikipedia.org/wiki/Word_(computer_architecture)
27bitマシンとかどーすんだよ
2018/11/07(水) 20:55:36.02ID:Lazgvcn1M
このように1バイトが何ビットかはアーキテクチャ依存のため、EUではハードディスクなどのパッケージにはGB単独表記は認められず、Go(ギガオクテット)を併記または単独で表記しなければならない。
1オクテットは必ず8バイト。
2018/11/07(水) 21:07:14.78ID:fEoWtkRgM
つまりEUでもHDDの容量はわからないってことか
2018/11/07(水) 21:09:34.64ID:u7stYdWj0
>>18
いや、Octetは8ビットでは?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況