I am following along with the k&r C book, and I stumbled across something odd doing excersice 2-1(determine maximum sizes of short, int, and long on your machine). I wrote this code for it:
#include <stdio.h>
int main()
{
long a;
long lasta;
int b , lastb;
short int c, lastc;
lasta = lastb = lastc = 1;
a = b = c = 2;
while (a || b || c) {
printf("lasta = %d\n", lasta); //for debugging
a = a * 2;
b = b * 2;
c = c * 2;
lasta = lasta * 2;
lastb = lastb * 2;
lastc = lastc * 2;
if (a < lasta) {
printf("%d\n", lasta * 2 - 1);
a = lasta = 0;
}
if (b < lastb) {
printf("%d\n", lastb * 2 - 1);
b = lastb = 0;
}
if (c < lastc) {
printf("%d\n", lastc * 2 - 1);
c = lastc = 0;
}
}
}
and I am getting a weird bug where it seems to work for short and int, but not long. I thing it is behaving as if lasta was a regular int. Here is the output:
lasta = 1
lasta = 2
lasta = 4
lasta = 8
lasta = 16
lasta = 32
lasta = 64
lasta = 128
lasta = 256
lasta = 512
lasta = 1024
lasta = 2048
lasta = 4096
lasta = 8192
32767
lasta = 16384
lasta = 32768
lasta = 65536
lasta = 131072
lasta = 262144
lasta = 524288
lasta = 1048576
lasta = 2097152
lasta = 4194304
lasta = 8388608
lasta = 16777216
lasta = 33554432
lasta = 67108864
lasta = 134217728
lasta = 268435456
lasta = 536870912
2147483647
lasta = 1073741824
lasta = -2147483648
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
lasta = 0
-1
I realize i could get the answer just by looking at the value of a, but I want to figure out whats going on here
printf with %d
means it thinks it's an int.
try %lu
and it will print an unsigned long
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.