我一直在用C編寫一個程序,將char的前4位移到末尾,最後4位移到開始位置。對於大多數值而言,它的工作原理以及反向操作都是正常的,但對於某些值,如8,x,y,z,它會給出一個32位值。通過打印變量的十六進制值檢查值。有人可以解釋爲什麼會發生這種情況嗎?char上的按位運算產生32位結果
#include <stdio.h>
#include <stdlib.h>
int main()
{
char o, f,a=15;
scanf("%c",&o);
printf("o= %d\n",o);
f=o&a;
o=o>>4;
printf("o= %d",o);
o=o|(f<<4);
printf("o= %x, size=%d\n",o,sizeof(o));
f=o&a;
o=o>>4;
printf("o= %d",o);
o=o|(f<<4);
printf("o= %x, size=%d\n",o,sizeof(o));
return 0;
}
'sizeof(o)'是那些永遠不會改變的東西之一 –
@ K-ballo然而,一致性是一個好習慣;所有其他尺寸都需要這個操作員,所以'o'的類型會改變,它不會給你一個難的時間。 – 2012-06-12 17:44:34
@ H2CO3:我印象中OP正在打印'sizeof(o)'的結果,看看'o'的類型和大小是否改變了。 –