diff --git a/construct/expr.py b/construct/expr.py
index 00a63f2..c1dd179 100644
--- a/construct/expr.py
+++ b/construct/expr.py
@@ -14,8 +14,8 @@ opnames = {
     operator.xor : "^",
     operator.lshift : "<<",
     operator.rshift : ">>",
-    operator.and_ : "and",
-    operator.or_ : "or",
+    operator.and_ : "&",
+    operator.or_ : "|",
     operator.not_ : "not",
     operator.neg : "-",
     operator.pos : "+",

diff --git a/tests/test_core.py b/tests/test_core.py
index 1876796..e92426c 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -2398,3 +2398,13 @@ def test_nullterminated_longterm_issue_1046():
     d = NullTerminated(GreedyBytes, term=b"END")
     assert d.parse(b"xxxEND") == b"xxx"
     raises(d.parse, b"xENDxx") == StreamError
+
+def test_compile_binexpr_bitwise_and_issue_1039():
+    d = Struct(
+        "a" / Int8ub,
+        "cond" / If(this.a & 32, Int8ub),
+        Terminated,
+    )
+    common(d, b"\x00", {"a": 0, "cond": None})
+    common(d, b"\x01", {"a": 1, "cond": None})
+    common(d, b" \x05", {"a": 32, "cond": 5})

Bitwise And is compiled as logical And
`ExprMixin` for bitwise has different behavior when compiled.

The following test is sufficient to catch the problem
```python
def test_compile_binexpr_bitwise_and():
    d = Struct(
        "a" / Int8ub,
        "cond" / If(this.a & 32, Int8ub),
        Terminated,
    )
    common(d, b"\x00", {"a": 0, "cond": None})
    common(d, b"\x01", {"a": 1, "cond": None})
    common(d, b" \x05", {"a": 32, "cond": 5})
```
tests/test_core.py::test_compile_binexpr_bitwise_and_issue_1039
tests/test_core.py::test_bytes tests/test_core.py::test_greedybytes tests/test_core.py::test_bytes_issue_827 tests/test_core.py::test_bitwise tests/test_core.py::test_bytewise tests/test_core.py::test_ints tests/test_core.py::test_ints24 tests/test_core.py::test_floats tests/test_core.py::test_formatfield tests/test_core.py::test_formatfield_ints_randomized tests/test_core.py::test_formatfield_floats_randomized tests/test_core.py::test_formatfield_bool_issue_901 tests/test_core.py::test_bytesinteger tests/test_core.py::test_bitsinteger tests/test_core.py::test_varint tests/test_core.py::test_varint_issue_705 tests/test_core.py::test_zigzag tests/test_core.py::test_zigzag_regression tests/test_core.py::test_paddedstring tests/test_core.py::test_pascalstring tests/test_core.py::test_pascalstring_issue_960 tests/test_core.py::test_cstring tests/test_core.py::test_greedystring tests/test_core.py::test_string_encodings tests/test_core.py::test_flag tests/test_core.py::test_enum tests/test_core.py::test_enum_enum34 tests/test_core.py::test_enum_enum36 tests/test_core.py::test_enum_issue_298 tests/test_core.py::test_enum_issue_677 tests/test_core.py::test_flagsenum tests/test_core.py::test_flagsenum_enum34 tests/test_core.py::test_flagsenum_enum36 tests/test_core.py::test_mapping tests/test_core.py::test_struct tests/test_core.py::test_struct_nested tests/test_core.py::test_struct_kwctor tests/test_core.py::test_struct_proper_context tests/test_core.py::test_struct_sizeof_context_nesting tests/test_core.py::test_sequence tests/test_core.py::test_sequence_nested tests/test_core.py::test_array tests/test_core.py::test_array_nontellable tests/test_core.py::test_greedyrange tests/test_core.py::test_repeatuntil tests/test_core.py::test_const tests/test_core.py::test_computed tests/test_core.py::test_rebuild tests/test_core.py::test_rebuild_issue_664 tests/test_core.py::test_default tests/test_core.py::test_check tests/test_core.py::test_error tests/test_core.py::test_focusedseq tests/test_core.py::test_pickled tests/test_core.py::test_namedtuple tests/test_core.py::test_hex tests/test_core.py::test_hexdump tests/test_core.py::test_hexdump_regression_issue_188 tests/test_core.py::test_union tests/test_core.py::test_union_kwctor tests/test_core.py::test_union_issue_348 tests/test_core.py::test_select tests/test_core.py::test_select_kwctor tests/test_core.py::test_optional tests/test_core.py::test_optional_in_struct_issue_747 tests/test_core.py::test_optional_in_bit_struct_issue_747 tests/test_core.py::test_select_buildfromnone_issue_747 tests/test_core.py::test_if tests/test_core.py::test_ifthenelse tests/test_core.py::test_switch tests/test_core.py::test_switch_issue_357 tests/test_core.py::test_stopif tests/test_core.py::test_padding tests/test_core.py::test_padded tests/test_core.py::test_aligned tests/test_core.py::test_alignedstruct tests/test_core.py::test_bitstruct tests/test_core.py::test_pointer tests/test_core.py::test_peek tests/test_core.py::test_offsettedend tests/test_core.py::test_seek tests/test_core.py::test_tell tests/test_core.py::test_pass tests/test_core.py::test_terminated tests/test_core.py::test_rawcopy tests/test_core.py::test_rawcopy_issue_289 tests/test_core.py::test_rawcopy_issue_358 tests/test_core.py::test_rawcopy_issue_888 tests/test_core.py::test_byteswapped tests/test_core.py::test_byteswapped_from_issue_70 tests/test_core.py::test_bitsswapped tests/test_core.py::test_prefixed tests/test_core.py::test_prefixedarray tests/test_core.py::test_fixedsized tests/test_core.py::test_nullterminated tests/test_core.py::test_nullstripped tests/test_core.py::test_restreamdata tests/test_core.py::test_transformed tests/test_core.py::test_transformed_issue_676 tests/test_core.py::test_restreamed tests/test_core.py::test_restreamed_partial_read tests/test_core.py::test_processxor tests/test_core.py::test_processrotateleft tests/test_core.py::test_checksum tests/test_core.py::test_checksum_nonbytes_issue_323 tests/test_core.py::test_compressed_zlib tests/test_core.py::test_compressed_gzip tests/test_core.py::test_compressed_bzip2 tests/test_core.py::test_compressed_lzma tests/test_core.py::test_compressed_prefixed tests/test_core.py::test_rebuffered tests/test_core.py::test_lazy tests/test_core.py::test_lazy_issue_938 tests/test_core.py::test_lazy_seek tests/test_core.py::test_lazystruct tests/test_core.py::test_lazyarray tests/test_core.py::test_lazybound tests/test_core.py::test_expradapter tests/test_core.py::test_exprsymmetricadapter tests/test_core.py::test_exprvalidator tests/test_core.py::test_ipaddress_adapter_issue_95 tests/test_core.py::test_oneof tests/test_core.py::test_noneof tests/test_core.py::test_filter tests/test_core.py::test_slicing tests/test_core.py::test_indexing tests/test_core.py::test_probe tests/test_core.py::test_debugger tests/test_core.py::test_repr tests/test_core.py::test_operators tests/test_core.py::test_operators_issue_87 tests/test_core.py::test_from_issue_76 tests/test_core.py::test_from_issue_60 tests/test_core.py::test_from_issue_171 tests/test_core.py::test_from_issue_175 tests/test_core.py::test_from_issue_71 tests/test_core.py::test_from_issue_231 tests/test_core.py::test_from_issue_246 tests/test_core.py::test_from_issue_244 tests/test_core.py::test_from_issue_269 tests/test_core.py::test_hanging_issue_280 tests/test_core.py::test_from_issue_324 tests/test_core.py::test_from_issue_357 tests/test_core.py::test_context_is_container tests/test_core.py::test_from_issue_362 tests/test_core.py::test_this_expresion_compare_container tests/test_core.py::test_exposing_members_attributes tests/test_core.py::test_exposing_members_context tests/test_core.py::test_isparsingbuilding tests/test_core.py::test_struct_stream tests/test_core.py::test_struct_root_topmost tests/test_core.py::test_parsedhook_repeatersdiscard tests/test_core.py::test_greedyrange_issue_697 tests/test_core.py::test_greedybytes_issue_697 tests/test_core.py::test_hex_issue_709 tests/test_core.py::test_buildfile_issue_737 tests/test_core.py::test_struct_copy tests/test_core.py::test_switch_issue_913_using_enum tests/test_core.py::test_switch_issue_913_using_strings tests/test_core.py::test_switch_issue_913_using_integers tests/test_core.py::test_nullterminated_longterm_issue_1046