Объясните пожалуйста разницу между & и &&

Собственно хочу понять что означает строка в С++:
if (x && y) {...}
если x и y - байты.

Цель моего желания - записать эту строчку на С# (который не хочет выполнять подобные операции ни с чем кроме bool).

Если речь идет о логических операциях:
С++ в отличие от C# автоматически пытается преобразовать значения "x" и "y" в тип Boolean, после чего сравнивает. Видимо C# этого лишен и надо явно преобразовывать типы.

if (x && y) {...} тоже самое, что и if ((bool)x && (bool)y) {...}

&& выполняет сравнение между двумя логическими операндами
& выполняет поразрядное сравнение между двумя операндами. (сравниваются разряды на одинаковых позициях)

ТОчно не знаю, но кажется, что если ставить два амперсанда и например первой переменной идёт ложь, то и результат сразу автоматически будет ложь. Если же один амперсанд, то результат зависит от обех переменных, даже если первая ложна и результат соответственно тоже ложен. Такая оптимизация) . Разименование указателя обозначается одним амперсандом, так что я уж и не знаю что думать. Кстати, в си-шарп можно пользоваться только двойным амперсандом, на сколько я знаю.

На C#
if (x != 0 && y != 0)

Липецкий Алексей, всё верно ответил.

&&, если первая операция будет false, то проверки второй операции не будет
&, если первая операция будет false, то вторая операция тоже выполняется
кроме того && - быстрее, & - возвращает точный результат, но только после всех вычислений
аналогично кстати и для | и ||

2 это и, а 1, вроде-бы операция разименования указателя в с++

Один символ побитовое И
Т. е. есть 2 числа (запишу в двоичном виде ) :
a = 00001010;
b = 00001100;
a&b вернёт 00001000;