У меня есть следующий код в C:битовые операции в C Объяснение
unsigned int a = 60; /* 60 = 0011 1100 */
int c = 0;
c = ~a; /*-61 = 1100 0011 */
printf("c = ~a = %d\n", c);
c = a << 2; /* 240 = 1111 0000 */
printf("c = a << 2 = %d\n", c);
Первый выход -61, а второй один 240. Почему первый Printf вычисляет дополнение в двоичное 1100 0011, а второй один просто преобразует 1111 0000 в десятичный эквивалент?
@Babbleshack нет, он не мог. Речь идет о предположении, что этот человек сделал о ширине int. – paddy
@paddy хорошая работа, я сделал это комментарий. Мне следовало потратить больше времени на размышления о том, что я сожалею об этом, больной удаляю его. – Babbleshack
'c' будет иметь значение' 1111 1111 1111 1111 1111 1111 1100 0011'. '~' дополняет все биты, а не только те, которые вы перечисляете в первой строке. –