Я не уверен, что вы хотите делать, читая ваш код.
Либо это слишком запутанно, либо слишком глючит.
1.) Если вы хотите «разорвать» более чем один цикл, вы можете написать вспомогательную функцию для циклов и вместо этого «return».
2.) Я не уверен, знаете ли вы это: b ++ означает: вернуть значение b, а затем увеличить значение переменной.
b++ equals:
{int x=b; b=b+1; return x;}
++b equals:
{b=b+1; return b;}
3.) Операторы & и | и ^ побитовые, && и || а также ! являются логическими операторами, которые неявно приводят 0 / NULL к false / 0, а все остальное к true / 1. Таким образом, (x & 0) всегда равно 0, а! (X & 0) равно 1.
4.) Я не уверен в этом, мои C-знания не полны: какова ценность этого:
((signed char)0xff) >> 1 == 0xff
or
((signed char)0xff) >> 1 == 0x7f
символы официально не являются ни подписанными, ни неподписанными; это разные типы, которые могут быть похожи на символы со знаком или без знака, в зависимости от компилятора.
5.) Этот код равен:
for(a,aa;b;c,cc)d,dd;
{a;aa; while(b){d;dd;c;cc;} }
Использование for вместо while может прояснить ситуацию, но эти три параметра for должны быть явно использованы, чтобы прояснить ситуацию. Для компилятора это не так актуально, но для читателя.
6.) Sizeof (char) всегда равен 1. То, что вы можете написать, вот что:
(SizeOf (MyArray) / SizeOf (MyArray [0]))