Skip to content

Commit 2a765bd

Browse files
committed
add complex
1 parent ecdfdcc commit 2a765bd

File tree

6 files changed

+140
-0
lines changed

6 files changed

+140
-0
lines changed

complex/anonymous_struct.zig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const print = @import("std").debug.print;
2+
3+
pub fn main() void {
4+
const point = struct { x: i16, y: i16 }{ .x = 100, .y = -10 };
5+
print("X: {}, Y: {}", .{ point.x, point.y });
6+
}

complex/bitfield1.zig

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const print = @import("std").debug.print;
2+
3+
const BitField = packed struct {
4+
bit0: u1,
5+
bit1: u1,
6+
bit2: u1,
7+
bit3: u1,
8+
bit4: u1,
9+
bit5: u1,
10+
bit6: u1,
11+
bit7: u1,
12+
};
13+
14+
const Register = union {
15+
bits: BitField,
16+
byte: u8,
17+
};
18+
19+
pub fn main() void {
20+
const reg = Register{ .byte = 0xA4 };
21+
const bits: BitField = @bitCast(reg.byte);
22+
23+
print("0x{x} = {}{}{}{} {}{}{}{}", .{
24+
reg.byte,
25+
bits.bit7,
26+
bits.bit6,
27+
bits.bit5,
28+
bits.bit4,
29+
bits.bit3,
30+
bits.bit2,
31+
bits.bit1,
32+
bits.bit0,
33+
});
34+
}

complex/bitfield2.zig

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const print = @import("std").debug.print;
2+
3+
const BitField = packed struct {
4+
bit0: u1,
5+
bit1: u1,
6+
bit2: u1,
7+
bit3: u1,
8+
bit4: u1,
9+
bit5: u1,
10+
bit6: u1,
11+
bit7: u1,
12+
};
13+
14+
const Register = union {
15+
bits: BitField,
16+
byte: u8,
17+
};
18+
19+
pub fn main() void {
20+
const bits = BitField{
21+
.bit0 = 0,
22+
.bit1 = 0,
23+
.bit2 = 1,
24+
.bit3 = 0,
25+
.bit4 = 0,
26+
.bit5 = 1,
27+
.bit6 = 0,
28+
.bit7 = 1,
29+
};
30+
31+
const reg = Register{ .bits = bits };
32+
const byte_value: u8 = @bitCast(reg.bits);
33+
34+
print("0x{x}", .{byte_value});
35+
}

complex/packed_struct.zig

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const print = @import("std").debug.print;
2+
3+
const Packed = packed struct {
4+
bit0: u1,
5+
bit1: u1,
6+
bit2: u1,
7+
bit3: u1,
8+
bit4: u1,
9+
bit5: u1,
10+
bit6: u1,
11+
bit7: u1,
12+
};
13+
14+
const Unpacked = struct {
15+
bit0: u1,
16+
bit1: u1,
17+
bit2: u1,
18+
bit3: u1,
19+
bit4: u1,
20+
bit5: u1,
21+
bit6: u1,
22+
bit7: u1,
23+
};
24+
25+
pub fn main() void {
26+
print("Packed size: {} byte\n", .{@sizeOf(Packed)});
27+
print("Unpacked size: {} byte", .{@sizeOf(Unpacked)});
28+
}

complex/packed_union.zig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const print = @import("std").debug.print;
2+
3+
const Packed = packed union { a: u32, b: f32, c: bool };
4+
const Unpacked = union { a: u32, b: f32, c: bool };
5+
6+
pub fn main() void {
7+
print("Packed size: {} byte\n", .{@sizeOf(Packed)});
8+
print("Unpacked size: {} byte", .{@sizeOf(Unpacked)});
9+
}

complex/readme.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Complex Type
2+
3+
```bash
4+
$ zig run packed_union.zig
5+
Packed size: 4 byte
6+
Unpacked size: 8 byte
7+
```
8+
9+
```bash
10+
$ zig run packed_struct.zig
11+
Packed size: 1 byte
12+
Unpacked size: 8 byte
13+
```
14+
15+
```bash
16+
$ zig run bitfield1.zig
17+
0xa4 = 1010 0100
18+
```
19+
20+
```bash
21+
$ zig run bitfield2.zig
22+
0xa4
23+
```
24+
25+
```bash
26+
$ zig run anonymous_struct.zig
27+
X: 100, Y: -10
28+
```

0 commit comments

Comments
 (0)