C言語を勉強しています。
printfのコードを確認していて、理解できない処理がありましたので質問させていただきます。
以下のコードの517行目のあたりのところです。
freebsd/printf.c at master · freebsd/freebsd
c
1number: 2 if (sign && (intmax_t)num < 0) { 3 neg = 1; 4 num = -(intmax_t)num; 5 }
printfで連携された数字が一度uintmax_t型の変数に代入され、それからマイナスの値をチェックするためにキャストされる部分です。
(intmax_t)num < 0
までは理解できるのですが
num = -(intmax_t)num;
は何をしているのでしょうか。
キャストしただけで元の数に変化はないと思うのですがなぜ再度キャストして代入するのでしょうか。
以下で試してみましたが、キャストで値が変更されたままということは無いようです。
c
1#include <stdio.h> 2 3int main() 4{ 5 unsigned char a = 240; 6 printf("%d\n", a); 7 printf("%d\n", (char)a); 8 printf("%d\n", a); 9 return (0); 10}
240 -16 240
よろしくお願いします。
2020/11/16 追記
質問の意図をうまく伝えられず、すみません。
negのフラグを入れると値が変わるような実装になっているのが疑問ということです。
c
1#include <stdio.h> 2 3int main() 4{ 5 int neg = 0; 6 unsigned char num; 7 8 num = 255; 9 printf("%d\n", num); 10 if ((char)num < 0) 11 { 12 neg = 1; 13 printf("%d\n", (char)num); 14 printf("%d\n", num); 15 num = -(char)num; 16 printf("%d\n", num); 17 } 18 return (0); 19}
実行結果
255 -1 255 1
回答1件
あなたの回答
tips
プレビュー