Originally posted by 10520397
View Post
Announcement
Collapse
No announcement yet.
con trỏ trong C
Collapse
X
-
Originally posted by 11520327 View Postnếu a+b vượt quá giá trị của biến kiểu int thì sao nhỉ?Be different and always different
http://archlinuxvn.org/
http://theslinux.org
http://lab.infosec.xyz
Comment
-
Originally posted by 09520019 View Postđúng rồi, nhưng để đơn giản hơn thì ta có thể tưởng tượng đoạn code biến thành thế này
Code:void swap(int &a,int &a) { a = a + a; a = a - a; a = a - a; } void swap(int &a,int &a) { a = a - a; a = a + a; a = a - a; } void swap(int &a,int &a) { a = a ^ a; a = a ^ a; a = a ^ a; }
Comment
-
Originally posted by 11520327 View Postanh viết tiếng gì thế, đọc chẳng hiểu?Be different and always different
http://archlinuxvn.org/
http://theslinux.org
http://lab.infosec.xyz
Comment
-
Originally posted by 10520058 View Posthọc mảng chưa a[-1] bằng cái gì trong mảng đó :-w. Tiếng đó là tiếng Việt, xin lỗi anh dốt tiếng Anh nên giữ nguyên văn phong return vì không biết dịch thế nào cho đúng, còn từ ói thì tự hiểu.
Comment
-
Originally posted by 11520327 View Postnếu a+b vượt quá giá trị của biến kiểu int thì sao nhỉ?Lê Bá Nhựt UIT-CE05
Phone: 0968-868-300
Email: nhutlbuit@gmail.com
Enthuse + Creative + Try => Success
Comment
-
Originally posted by 11520327 View Postnói thật bây giờ e chẳng hiểu a đang nói gì! a nói rõ hơn được không? chúng ta đưa ra ý kiến cùng thảo luận thì a nên viết 1 cách rõ ràng dễ hiểu!Be different and always different
http://archlinuxvn.org/
http://theslinux.org
http://lab.infosec.xyz
Comment
-
Originally posted by 10520058 View Postthái độ thì khỏi nói nữa :]]Last edited by 11520327; 14-10-2012, 17:25.
Comment
-
Originally posted by 11520327 View Postnếu a+b vượt quá giá trị của biến kiểu int thì sao nhỉ?
Dễ dàng thấy là kết quả của đoạn chương trình {a = a + b; b = a - b; a = a - b;} cho dù giá trị của a + b > INT_MAX sẽ không sai.
Bạn có thể xem thêm link này http://diendan.congdongcviet.com/sho...?t=3765&page=2.
Thân chào,
Comment
-
Originally posted by 08520021 View PostNếu a + b vượt quá giá trị kiểu int thì cũng không sao cả đâu bạn. Vì quy tắc tràn số trong C là theo vòng, chẳng hạn: a = INT_MAX; /*2147483647 (Windows)*/, thì khi printf("%d", a + 1); sẽ cho ra kết quả là: -2147483648 /*-2147483647 - 1*/. Đối với phép trừ thì quy tắc tràn số cũng như phép cộng.
Dễ dàng thấy là kết quả của đoạn chương trình {a = a + b; b = a - b; a = a - b;} cho dù giá trị của a + b > INT_MAX sẽ không sai.
Bạn có thể xem thêm link này http://diendan.congdongcviet.com/sho...?t=3765&page=2.
Thân chào,PHP Code:#include<stdio.h>
int main()
{
int a = 2147483640,b=21474;
printf("%d", a+b);
return 0;
}
Be different and always different
http://archlinuxvn.org/
http://theslinux.org
http://lab.infosec.xyz
Comment
-
Originally posted by 10520058 View Postvẫn tràn nha anh :-). Em build trên Gcc 4.7.2
Ý mình là nó vẫn sẽ tràn nhưng có quy tắc và theo cái quy tắc đó thì đoạn chương trình này sẽ vẫn cho ra kết quả (cuối cùng) là chính xác.
Code:#include <stdio.h> void swap(int *a, int *b) { *a = *a + *b; *b = *a - *b; *a = *a - *b; } int main() { int a = 2147483640, b = 21474; printf("Before: a = %d, b = %d", a, b); swap(&a, &b); printf("\nAfter: a = %d, b = %d", a, b); return 0; }
Comment
-
Originally posted by 08520021 View PostChắc do mình nói không rõ nên bạn hiểu sai ý chăng? :-S
Ý mình là nó vẫn sẽ tràn nhưng có quy tắc và theo cái quy tắc đó thì đoạn chương trình này sẽ vẫn cho ra kết quả (cuối cùng) là chính xác.
Code:#include <stdio.h> void swap(int *a, int *b) { *a = *a + *b; *b = *a - *b; *a = *a - *b; } int main() { int a = 2147483640, b = 21474; printf("Before: a = %d, b = %d", a, b); swap(&a, &b); printf("\nAfter: a = %d, b = %d", a, b); return 0; }
lưu tổng của 2 số vào 1 và sau đó trừ cái kia ra và ngược lại luôn đúng với bất kì tập số a,b nào thuộc R (không phụ thuộc tràn số) nhưng sinh ra ba phép tình và 3 phép gán :-) Nên tránh.Be different and always different
http://archlinuxvn.org/
http://theslinux.org
http://lab.infosec.xyz
Comment
Comment