C/C++显示类型转换的位拓展方式

最近用verilator写模块的tb,在这里卡了好久(测半天都是C++写的问题)

要点

变量从小位宽到大位宽显示类型转换(explicit cast)时的位拓展方式,取决于转换前变量的符号性

倘若转换前为无符号,则拓展为无符号拓展;反之则为有符号拓展。至于转换后的类型,是用来标记拓展后新值符号性用的,不决定拓展方式。

其实和verilog/systemverilog一致(有些忘了,记得有很多规则)。算是仅取决于RHS的情况

案例

uint32_t a = 0x83c60ce1;
printf("0x%016llx\n", a);		// 输出 0x0000000083c60ce1
printf("0x%016llx\n", (int64_t)a);	// 输出 0x0000000083c60ce1; (uint64_t也一样)
int32_t a = 0x83c60ce1;
printf("0x%016llx\n", a);		// 输出 0x0000000083c60ce1
printf("0x%016llx\n", (int64_t)a);	// 输出 0xffffffff83c60ce1; (uint64_t也一样)
posted @ 2023-01-14 22:33  Xlucidator  阅读(65)  评论(0编辑  收藏  举报