SystemVerilog:byte型の代入メモ
こちらのブログにて、
SystemVerilog String Literal "Gotcha"
ぱっと見ると、意味がわからなったけど少し眺めてみると内容が理解できた。
つまり、byte型に対して、文字列(本来ありえないけど)を代入した場合に、どの部分が代入されるかということ。
番号 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|
文字列 | n | o | t | a | b | y | t | e |
SystemVerilogでは、番号0であるe
が代入される。
ここで???って思ったのが、C/C++だと配列への代入が異なるから。
配列 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
文字列 | n | o | t | a | b | y | t | e |
- サンプルコード(C++)
#include <stdio.h> int main(void) { char str[] = {"not a byte"}; for(int i=0; i<10; i++) { printf("str[%d] = %c\n",i, str[i]); } return 0; }
- 出力結果
str[0] = n str[1] = o str[2] = t str[3] = str[4] = a str[5] = str[6] = b str[7] = y str[8] = t str[9] = e
ってことはもしかしたら、シミュレータの内部では
bar = "not a byte";
は↓のような感じの代入になっているのかもしれませんね。
char str[] = {"not a byte"}; for(int i=0; i<10; i++) { bar = str[i]; }