[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/11 11:58 / Filesize : 243 KB / Number-of Response : 1037
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 145



1 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 22:13:58.98 ID:9/te2eSJ0.net]
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

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

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

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

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


C言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

654 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:17:02.05 ID:VOv2iUaR0.net]
struct a{
bool x:1;
uint32_t y:31;
};
しらべたらこれの大きさが8バイツでした
sizeof(struct a)とやったらそうなったのでアラインメントのもんだいではありません。
どうしても4バイツにしたいです

655 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:20:50.14 ID:949beg24p.net]
型を揃えるか、ブラグマ指定する、

656 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:22:01.11 ID:6oSpwfuc0.net]
もしかして変数を分解しようとしてる?
Unionってしってるかー?

657 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:24:10.52 ID:949beg24p.net]
構造体宣言に
__attribute__((packed))
を挟む

658 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:26:05.22 ID:6oSpwfuc0.net]
C++なら、無名うにおんとかつかえて楽なんだけど、Cは一々名前がつくので面倒。

659 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:26:08.96 ID:949beg24p.net]
両方uint32_tにすりゃいいだろ。

660 名前:デフォルトの名無しさん [2018/03/27(火) 11:26:51.67 ID:VOv2iUaR0.net]
struct a{
uint32_t a:1;
uint32_t y:31;
};
こうやったらできました
ビットフィールドを勘違いしていたのが原因みたいです。

661 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:27:20.90 ID:6oSpwfuc0.net]
あら、そっちか。

662 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:36:24.22 ID:VOv2iUaR0.net]
struct a{
union{
bool a:1;
struct{
uint32_t x:1;
uint32_t y:31;
};
};
};
つまりこうしたらよいのですね。
勉強になりました。ありがとうございます。



663 名前:デフォルトの名無しさん [2018/03/27(火) 12:00:48.00 .net]
>>640
これ、bool aとuint32_t xが同じ値であることがどの環境下でも保証されてるの?
教えてエロい人

664 名前:デフォルトの名無しさん [2018/03/27(火) 12:36:27.71 ID:NeN1yqDWa.net]
>>622
ビットフィールドって同じ型が並んでないとまとめてくれないのでは?

なので、

bool a:1;
uint32_t b:31;

ではなくて

uint32_t a:1;
uint32_t b:31;

にしたらできないか?

665 名前:デフォルトの名無しさん [2018/03/27(火) 12:39:07.90 ID:NeN1yqDWa.net]
既に答えが出て解決していた

        ||
        ||
      ∧||∧   
     ( / ⌒ヽ
      | |   |
      ∪ / ノ
       | ||
       ∪∪

      -━━-

666 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 12:44:29.48 ID:i2YWXGc+0.net]
>>631
姓だよ、とある有名人の
国内ではエメリヤエンコということになっている

667 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 13:11:29.05 ID:VOv2iUaR0.net]
https://ideone.com/GfSSSt
上のコードみてください。
なぜか上の構造体を使って初期化すると値がただしくなりません。
なぜですか?

668 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 13:53:29.94 ID:KACb5w790.net]
>>645
どこが正しくないのか説明してもらわないとたぶん

669 名前:誰も分からない []
[ここ壊れてます]

670 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:15:12.36 ID:VOv2iUaR0.net]
https://ideone.com/WeAoO6
なにものかにコードが書き換えられたみたいです
正しくは上のコードを見てください。

671 名前:片山博文MZ mailto:sage [2018/03/27(火) 15:32:49.24 ID:eCLpRZm+d.net]
unionにビットフィールドは使えないっしょ。

672 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:42:37.68 ID:jWaORT7c0.net]
>>647
struct a a={.y=1, .a=true};
ここを
struct a a={.a=true, .y=1,};
こう書き換えると動作が変わる。
何故変わるか考えてみよう。



673 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:45:46.56 ID:jMKP3TFv0.net]
struct になってない単変数でのビットフィールドって
結局支持された型の空間をめいっぱい使って書いてるんでないの

674 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 16:45:45.41 ID:VOv2iUaR0.net]
>>648
直しました
>>649
考えてもわかりませんでした

675 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 17:22:21.42 ID:tnecWY6M0.net]
>>637-638 >>642
ビットフィールドの詰め込み方だけど、
「同じ型の並びならまとめる、異なる型同士はまとめない」、
「型に関係なくまとめる」、(他にもパターンあるかも…)、
どれになるかは環境依存だからアテにしてると移植性の問題にハマるよ。

ビットフィールドは内部的な配置を気にしない場合だけ使うのが鉄則。
>>622 の流れからすると、ビットフィールドを含む構造体は
sizeof が返すバイト数も気にしちゃいけないね。

676 名前:デフォルトの名無しさん [2018/03/27(火) 17:46:09.15 .net]
>>647
unionの中にもう一つstruct
uint32_t b0:1; 〜 uint32_t b31:1;
を入れてみて、b0〜b31をオール0、その次はオール1にして
aやyに代入するたびにb0〜b31がどう変化するかを確かめればいいと思うよ。

677 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 18:48:56.23 ID:lphBpvplM.net]
gotoは要らない子?

678 名前:デフォルトの名無しさん [2018/03/27(火) 19:18:17.87 ID:NeN1yqDWa.net]
>>652
コンパイラによっては型に関係なく並べるのもあるのか。知らなかった。

679 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 09:16:12.84 ID:UsIzsSLh0.net]
unionで共用関係作っても、詰め込み順が統一されてる保証は無いからなぁ。
んなトリッキーな処理は、移植ん時死ねるぞ。

680 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 09:21:05.87 ID:hD+ZgK6z0.net]
ビットフィールドの順番がコンパイラによって違うのには参った

681 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 09:27:44.69 ID:txGSPNwpa.net]
>>657
エンディアンの違いで逆順になるのは昔からあるな。
コンパイルオプションでなんとかなるといいんだけどな。

682 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 15:08:36.90 ID:NO5LUaew0.net]
いやあ、そんなドジ踏んだことないし
踏んだやつも見かけないなあ
unionなんか使うときはそういう危険性には
真っ向から対峙しているのでうっかり考え落とす
なんてことは起こりえない

ポインタをキャストするときのほうが危ないぞ
unionよりも遙かに使用頻度が高くて油断しがち



683 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 16:15:36.83 ID:zOM5QtYn0.net]
>>659
たしかに

684 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 20:45:19.82 ID:inZxrYqzp.net]
普段からアライメント気にしない石使ってると死ぬるw

685 名前:デフォルトの名無しさん [2018/03/29(木) 00:01:16.65 ID:ySkkjEPJa.net]
野積み

686 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/29(木) 00:09:03.12 ID:X8gSQriyM.net]
SIG11

687 名前:デフォルトの名無しさん [2018/03/29(木) 00:30:03.68 ID:HYrXjV+u0.net]
>>654
出来の悪い子ほど可愛いものさ

688 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 02:58:45.40 ID:Ng8O1HeK0.net]
GOTOはその場所より基本上流に流しちゃいけない。


689 名前:サれだけ守ってればいいと思う。 []
[ここ壊れてます]

690 名前:デフォルトの名無しさん [2018/03/29(木) 03:06:08.42 .net]
if文とかfor文の中に飛ばすのもダメだろ

関数末尾以外に飛ばすのは基本アカンと思う

691 名前:デフォルトの名無しさん [2018/03/29(木) 07:24:44.79 ID:+dX3Weor0.net]
gotoとswitchの組み合わせはよくやる。

692 名前:デフォルトの名無しさん [2018/03/29(木) 22:57:50.45 ID:HYrXjV+u0.net]
>>667
switch と goto と聞いて、はっもしやこんなこともできるのでは、と思ってやってみたら、できてしまったよ。どうしよう。

#include <stdio.h>

int main()
{
 int i;

 for (i = 0; i < 10; i++) {
  if (i == 5)
   goto hoge;
  switch (i) {
   case 1:
    puts("いち");
    break;
hoge:
   puts("ご");
   break;
  }
 }

 return 0;
}



693 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 13:01:35.10 ID:fkO+Wt7Ma.net]
情報処理用にC頑張り始めたンスけど、初心者本は2冊くらい終えて、簡単なプログラムならあるていど作れるようにもなったんスけど、FEの過去問には全く歯がたたないっすw

694 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 13:03:50.38 ID:fkO+Wt7Ma.net]
初見の歯抜けプログラムみて選択肢与えられてもなんだかさっぱり読み切れん…
中級本の内容の方がまだ簡単なんスけどニキこれなんなんすか

695 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 13:04:58.91 ID:n1WKWzHR0.net]
Duff's deviceっていうスイッチの中にループがあるのもある

696 名前:デフォルトの名無しさん [2018/03/30(金) 16:19:34.10 ID:zQBQo8b30.net]
>>668
おめ
はげめ

697 名前:デフォルトの名無しさん [2018/03/30(金) 16:22:11.93 ID:bDuRGN0f0.net]
>>668
goto default;

698 名前:デフォルトの名無しさん [2018/03/30(金) 16:55:37.88 ID:InC0asnz0.net]
あれにはそういう名前があったのか。ありがとう。

699 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:55:35.60 ID:6y8tfNRe0.net]
同じく
名前は知らんかった

700 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 19:36:36.57 ID:FHOFausT0.net]
値の入れ替え処理ってどう描けばいいんや

701 名前:片山博文MZ mailto:sage [2018/03/30(金) 19:38:47.12 ID:9udtptfNd.net]
>>676
int tmp = a;
a = b;
b = tmp;
もしくは
std::swap(a, b);

702 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/30(金) 19:42:57.58 ID:TqB3XhjJM.net]
a = a ^ b;
b = a ^ b;
a = a ^ b;



703 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 19:46:21.82 ID:FHOFausT0.net]
>>677
mainから分離させると

void Swap()
{
std::swap(a,b);
}

こうなるってこと??

704 名前:片山博文MZ mailto:sage [2018/03/30(金) 19:47:24.27 ID:9udtptfNd.net]
a ^= b;
b ^= a;
a ^= b;

705 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 19:49:14.07 ID:sxHgkaP90.net]
>>678
b の実体が a だと a = 0 になってしまう、とは頻繁に指摘されるところ

706 名前:片山博文MZ mailto:sage [2018/03/30(金) 19:49:30.92 ID:9udtptfNd.net]
void myswap(int *pa, int *pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}

707 名前:デフォルトの名無しさん [2018/03/30(金) 20:19:58.73 ID:x2Z4e+RCa.net]
>>677
それC++だよね。

708 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:29:07.56 ID:zSEpPQDd0.net]
ワザとだと思います

709 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:32:46.73 ID:3ziE5qsO0.net]
値の入れ替えってどういう局面で使うの?

710 名前:片山博文MZ mailto:sage [2018/03/30(金) 20:35:46.51 ID:9udtptfNd.net]
>>685
ソートとか、順番を変えるときとか、データの入れ替えなど。

711 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:37:07.43 ID:N/erQ4tDM.net]
ソート
他では見かけない

712 名前:片山博文MZ mailto:sage [2018/03/30(金) 20:42:10.63 ID:9udtptfNd.net]
音楽のシャッフルなんかもswap使っている。



713 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:49:54.40 ID:3ziE5qsO0.net]
ああ、int aとかじゃなくて配列要素に使うのね
納得ありがとう��

714 名前:片山博文MZ mailto:sage [2018/03/30(金) 20:53:18.14 ID:9udtptfNd.net]
配列要素やポインタにも使える。この入れ替えアルゴリズムを抽象化するとC++のstd::swapになる。

715 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:15:31.22 ID:sWH8jgUv0.net]
goto LABEL0;
{
  int i = 1; /* 初期化 */
  int j;
  j = 1; /* 代入 */
LABEL0:
  printf("%d %d\n", i, j);
}

716 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 01:54:40.82 ID:OnKsCXxga.net]
Mapみたいな連想配列使いたいんだが何使えばええんや

717 名前:デフォルトの名無しさん [2018/03/31(土) 03:57:34.23 ID:2Z4gCLvWa.net]
switchのラベルって違うswitch(){}の中なら重複してても使えるやん?
それで goto HOGE; したらどっちに飛ぶ?

718 名前:デフォルトの名無しさん [2018/03/31(土) 03:58:50.47 ID:2Z4gCLvWa.net]
>>681
ならねーよΩ

719 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 07:10:32.62 ID:1xZcLHDp0.net]
>>694
>>678 のアルゴリズムには重大な欠陥がある、という点は頻繁に指摘されることですよ、知らないの?
https://ideone.com/uYFQRK

720 名前:デフォルトの名無しさん [2018/03/31(土) 07:17:07.25 .net]
if (a != b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}

721 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 07:19:42.34 ID:1xZcLHDp0.net]
>>696
それは対策になっていない

722 名前:デフォルトの名無しさん [2018/03/31(土) 08:13:17.33 .net]
>>697
なんで?



723 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/31(土) 08:15:52.05 ID:NJrC8qbaM.net]
>>695
ポインタ使って無いアルゴリズムをポインタ付きに移植して
欠陥とはこれ如何に。
只の移植失敗だろ。池沼か

724 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:22:07.33 ID:1xZcLHDp0.net]
>>699
xor スワップがどこまで有効か、どうなると不適になるかをはっきりさせておかないと、嵌る、>>678 にはその指摘がない
C なんだからポインタの話は不可欠だ、それを指摘したのが >>681

725 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:47:25.82 ID:EbDGZ0yc0.net]
wikiより

void xorSwap(int *x, int *y)
{
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}

726 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:59:46.96 ID:15qJIIAA0.net]
bの実体がaなんてことが参照のないCで起こりうるのか?
#define b aなんてアホなことぬかすなよ

727 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:06:42.53 ID:8va89mAu0.net]
ヒューマンエラーは果てしないのじゃー。

728 名前:マクロでーとか言いそう w mailto:sage [2018/03/31(土) 09:12:11.67 ID:OaeapR1O0.net]
>>700
ごたくはいいから
a ^= b;
b ^= a;
a ^= b;
のコードでaとbの実体が同じになる例をあげろよ
もちろんC言語の範疇でな

729 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:13:01.96 ID:1xZcLHDp0.net]
>>702
その #define マクロでうっかり、xor スワップを書いてしまう、とかは、可能性としてあり得りますね
あと、C++ テンプレートで書いてしまったり、とかね
https://ideone.com/NEeCNr

730 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:13:25.89 ID:1xZcLHDp0.net]
>>704
>>705

731 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:57:17.92 ID:V7rzy3dc0.net]
マクロで xor の入れ替えを書く
配列の操作で同じ要素の入れ替えも、都合上そのまま交換する方向で記述する
(配列を逆順に入れ替える時、要素数が奇数だと発生

732 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:03:16.74 ID:OaeapR1O0.net]
>>705
> あと、C++ テンプレートで書いてしまったり、とかね
スレタイ100回音読してこい



733 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:08:47.90 ID:1xZcLHDp0.net]
>>708
今どんな気持ち?どんな気持ち?AA略

734 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:17:56.15 ID:EbDGZ0yc0.net]
マウント合戦うぜぇ。

735 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:24:01.94 ID:1xZcLHDp0.net]
>>710
まあ、こういうのでは考えが足りずに負けることもあるし
>>709 は権利ですよ
マウント合戦、勝てば飯がうまいですなあ

736 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:29:40.14 ID:OaeapR1O0.net]
名前欄ぐらい見とけよ w

737 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:32:21.69 ID:15qJIIAA0.net]
>>709
そのまま返す

738 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:34:30.68 ID:NJrC8qbaM.net]
678のメール欄もなw

739 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:40:28.44 ID:OaeapR1O0.net]
>>714
いや、さすがあれはメアド欄なんて見なくてもネタってわかるだろ w

740 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:43:37.64 ID:15qJIIAA0.net]
>>705
templateにする必要ないのに無理しちゃって
void aho(int& a, int& b)
{
if(&a == &b) throw sys

741 名前:tem_error{error_code{1xZcLHDp0_category(), 709}, R"(
 ハァ・・・   ハァ・・・   ハァ・・・
             : ∧     ∧ :
            : / ヽ    / ヽ :
        : /   >__/∴ ヽ :
        : /   ;;# ,∴∵; ヽ ∴\ :   
      : / -==、   '  、==-∴∵丶 :     き、きょうはこれくらいで勘弁してやるニダ…
    : / ""   _┃_ ""  * ∵∴\ :
     : \ #;∴  l/ニニ| ∵ / ∴∵/ :
       : ヽ∵//;;.;`ー‐' # ∴#∵ノ :
         >;;;: _   _ ;, _ ;_<
       : / # ;∴    ∴ #  \ :
)"};
}
[]
[ここ壊れてます]

742 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:44:13.72 ID:1xZcLHDp0.net]
>>678 メール欄
あれ、まあ?!‥‥‥自分<今どんな気持ち?どんな気持ち?

まあ鎬を削るのであれば、こっちが楽しいのではありまする
https://mevius.5ch.net/test/read.cgi/tech/1514772904/



743 名前:デフォルトの名無しさん [2018/03/31(土) 11:07:01.32 ID:c97ae/y4F.net]
>>695
それ xor を使ってることによる欠陥じゃなくて
同じポインタを渡してることが欠陥だろ

744 名前:デフォルトの名無しさん [2018/03/31(土) 16:34:53.19 ID:4s7VNOk80.net]
>>695
18行目がこうなっているわけだが
myswap(&a, &a);
これでは参考にならんよな。
a, b を同じ値にしてから &a, &b で呼び出さないと。
まあでも myswap() 側で調べて同じなら何もしないように作っとけばいいだけではあるが。

745 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:23:06.22 ID:EbDGZ0yc0.net]
つまりswap関数に必ず同じ変数orポインタアドレスを渡さないよう確認する人と
渡しても大丈夫な仕様にする人とが同じチームに居るとこうなると。

746 名前:デフォルトの名無しさん [2018/03/31(土) 17:38:31.63 ID:c97ae/y4F.net]
速度の問題あるから関数側でいちいち判定コード書くのは避けたいところ

747 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:53:31.86 ID:OaeapR1O0.net]
そのネタいつまで続けるの?

748 名前:デフォルトの名無しさん [2018/03/31(土) 18:24:11.53 ID:wolthb3Z0.net]
ちょっと聞きたいんだけど
char c = '5';
c -= '0';
int a = c*16;
こうゆうやり方ありなの?

749 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:27:06.54 ID:gYRRCVdX0.net]
ある

750 名前:デフォルトの名無しさん [2018/03/31(土) 18:27:10.52 ID:c97ae/y4F.net]
ありじゃね
unsigned char じゃいかんとか
unsigned char の方がいいとか
どうせ int になるんだしとか
ebcdic は?とか


751 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:49:12.37 ID:1xZcLHDp0.net]
>>718
xor スワップは、xor: ^ が
a^(a^b) == b
b^(a^b) == a
で、つまるところ、a, b, a^b の三種類の値のうち一種類が欠けても、残りの二つから欠けた一つを再生できる(RAID5と同じ)ところに着目しているわけで、
xor や同様に exclusive-nor だからできること

ちゃんと二種類の値をずっとキープできておればスワップは成功するが、
そうでない場合は失敗する

上記のことを考えると@ xor/xnor であることと、A現れるオブジェクトが別であることを保証することの両方が必要だと思うよ

>>719
まあ値が等しいときは@オブジェクトが同じ可能性があるAそもそもスワップする必要がない
から値が同じかどうかのチェックをかませば OK ではあるね、それは同意するよ

752 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:38:17.63 ID:xg3JkNB30.net]
これなら安全じゃろ。

void xorSwap(int * restrict x, int * restrict y)
{  *x ^= *y;
 *y ^= *x;
 *x ^= *y;
}

無責任極まりないやり口だけどな。



753 名前:727 mailto:sage [2018/03/31(土) 20:42:41.15 ID:xg3JkNB30.net]
改行乱れちゃった、てへ。
Cはフリーフォーマットだから…。

754 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:45: ]
[ここ壊れてます]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef