Tôi rất mới để đối phó với bit và đã bị mắc kẹt trên các cảnh báo sau khi biên dịch:cảnh báo: trái đếm sự thay đổi> = chiều rộng của loại
7: warning: left shift count >= width of type
dòng My 7 trông như thế này
unsigned long int x = 1 << 32;
Điều này sẽ có ý nghĩa nếu kích thước long
trên hệ thống của tôi là 32 bit. Tuy nhiên, sizeof(long)
trả lại 8
và CHAR_BIT
được định nghĩa là 8
cho thấy rằng thời lượng dài phải là 8x8 = 64 bit.
tôi thiếu gì ở đây? Có phải sizeof
và CHAR_BIT
không chính xác hoặc tôi đã hiểu nhầm điều gì đó cơ bản không?
Sẽ 'unsigned long x = 1; x << = 32; 'công việc, không quan tâm? –
@Kolink: Vâng, điều đó sẽ có tác dụng tương tự, cũng như '(unsigned long) 1 << 32' Toán hạng trái chỉ phải là một 'unsigned long'. Hậu tố 'UL' chỉ là cách đơn giản nhất để thực hiện điều đó. –
@ James McNellis: Các vấn đề * của __left__ chuyển số nguyên đã ký * là gì? Tôi chỉ biết rằng *** quyền *** chuyển một số nguyên có dấu có thể dẫn đến kết quả khác nhau với các trình biên dịch khác nhau. – pynexj