目标是打印-ve或+ ve整数的二进制输出,当我们用signed声明变量时输出是正确的,但是当变量声明为unsigned时无法理解行为。
int main() {
unsigned char num = -1; /* unsigned int */
int i = 0;
/* Loop to print binary values */
for (i = 0 ; i < 8; i++) {
if(num & 128u)
{
printf("1 ");
}
else
{
printf("0 ");
}
num= num<<1;
}
printf("\n");
return 0;
}
输出打印为&#34; 1 1 1 1 1 1 1 1&#34;
等于-1;但我已将unsigned int
作为输入。这是怎么回事?
答案 0 :(得分:0)
当你做的时候
unsigned char num = -1; /* unsigned int */
以num
存储的是十进制的255(最大数字)。所以在每个循环中if(num & 128u)
都令人满意,所以o / p就是....
/ *输出打印为&#34; 1 1 1 1 1 1 1 1&#34; * /
还有一些问题你说的是int
,但是在程序中你已经char
变量并在signed
变量中存储unsigned
数字,所以你会没有得到你期望的o / p。