Xét đoạn mã sau:Tiêu chuẩn C nói gì về bithifting bit nhiều hơn chiều rộng của loại?
int i = 3 << 65;
Tôi hy vọng rằng kết quả là i==0
, tuy nhiên kết quả thực tế là i==6
. Với một số thử nghiệm tôi thấy rằng với đoạn mã sau:
int i, s;
int a = i << s;
int b = i << (s & 31);
các giá trị của a
và b
luôn luôn giống nhau.
Chuẩn C có nói gì về việc chuyển đổi hơn 32 bit (chiều rộng loại int
) hoặc hành vi không xác định này không?
"Đủ tốt cho tôi" - đủ tốt cho mọi người, vì tiêu chuẩn chứa chính xác cùng một ngôn ngữ. :-) Lưu ý rằng bạn cũng có thể có được C99 + TC3 miễn phí tại http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf và nó cũng có cùng ngôn ngữ, vì vậy ngay cả khi bạn không có tiêu chuẩn chính nó, bạn có thể khá chắc chắn những gì nó nói! –
Bạn cũng có thể có được phiên bản html dễ đọc hơn nhiều ở đây: http://port70.net/~nsz/c/c99/n1256.html –
@R .., oh, cảm ơn, điều đó sẽ dễ dàng hơn để đọc hơn PDF. :) – sarnold