Смещение вправо отрицательных значений со знаком равно , реализация определена Для gcc сдвигается 1, в противном случае сдвигается 0.
Вы были на правильном пути с броском, но это не помогает, так как функция все еще ожидает int
.Вам нужно изменить функцию, чтобы она заняла unsigned char
, и вы должны замаскировать все байты, кроме младшего, перед выполнением сдвига в вызове функции.
#include <stdio.h>
void printfbits(unsigned char x) {
for (int i=7; i>=0;i--) {
printf("%d", x>>i & 1);
}
printf("\n");
}
int main() {
printfbits((~0u & 0xff)>>1);
}
Также обратите внимание на использование U
суффикс константы 0. Это дает константе тип unsigned int
.