Basic C.

> Take this example program:
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
> 
> int
> main(void)
> {
>      uint32_t n = arc4random();
> 
>      printf("arc4random %d\n", n);
>      printf("abs %d\n", abs(n));
> 
>      return 0;
> }
> 
> It gives the following warning when compiling:
> 
> test.c:11:21: warning: taking the absolute value of unsigned type 
> 'uint32_t' (aka 'unsigned int') has no effect [-Wabsolute-value]
>          printf("abs %d\n", abs(n));
>                             ^
> test.c:11:21: note: remove the call to 'abs' since unsigned values 
> cannot be negative
>          printf("abs %d\n", abs(n));
>                             ^~~
> 
> Which is well and good. However, I get the following output.
> 
> laptop$ ./a.out
> arc4random 247165650
> abs 247165650
> laptop$ ./a.out
> arc4random 2012715611
> abs 2012715611
> laptop$ ./a.out
> arc4random 222644175
> abs 222644175
> laptop$ ./a.out
> arc4random -843593186
> abs 843593186
> 
> So on the fourth try I got what appears to be a negative number back. 
> I'm not sure if this is some printf() funny business or what. Please 
> explain. In real life I don't intend on using this with printf() so If 
> thats the case no worries. However, if not I need to know that my random 
> number is positive. I also tried if (n < 0) etc.. and got similar warnings.
> 
> Thanks in advance,
> 
> Edgar
> 

Reply via email to