check the sentence &ff

//date 2013 4 17
//designer :pengxiaoen
//function : check the sentence &ff

#include "stdio.h"
#include "stdlib.h"
int main ()
{
int a_32bit = -5 ;
char b_8bit =0x28;

//char b_8bit =0x82;


char char_a_32bit[100];
char char_b_8bit[100];

printf ("%%b a_32bit = %s\n", itoa(a_32bit, char_a_32bit, 2));
printf ("%%b b_8bit = %s\n", itoa(b_8bit, char_b_8bit, 2));

printf ("the sizeof a_32bit = %d\n", sizeof (a_32bit));
printf ("the sizeof b_8bit = %d\n", sizeof (b_8bit));

printf ("\n\n");

a_32bit = a_32bit & 0xff;
b_8bit = b_8bit & 0xffff;

printf ("%%b a_32bit = %s\n", itoa(a_32bit, char_a_32bit, 2));
printf ("%%b b_8bit = %s\n", itoa(b_8bit, char_b_8bit, 2));

printf ("the sizeof a_32bit &0xff = %d\n", sizeof (a_32bit));
printf ("the sizeof b_8bit &0xffff= %d\n", sizeof (b_8bit));

system ("pause");

}

 

 

结果

  这个结果可以发现:a_32bit 赋值初期输出32bit。(如果是赋值5,这等整数,前面的0就被省略了,所以用负数赋值给a_32bit)。当&0xff后就输出八位,这就是我们在C中常用的缩位。但是char 类型在这里却不给力啊,什么情况呢?

  好做一点修改:将 char b_8bit =0x28;这条语句修改成  char b_8bit =0x82;也就是讲char的最高位变成了 1 。结果大出意料

  请问这是为什么呢?itoa()这个函数不好惹,因为我没有查到这个函数底层是如何实现的,所以我也不知道为什么。

 

  继续思考后来将printf ("%%b b_8bit = %s\n", itoa(b_8bit, char_b_8bit, 2)); 替换成    printf ("%%b b_8bit = %s\n", itoa(b_8bit& 0xfffff, char_b_8bit, 2)); 结果正常了

  b的输出的确变成了20个bit,在b_8bit = b_8bit & 0xffff;这条语句中,由于左边只有8 bit,所以还是以8bit 存储。但是目前还是无法解释 为什么char类型8bit为什么在itoa()中输出32bit,而且规律是 多余位用最高位补齐了。

  这是为什么呢?思考中................

posted on 2013-04-18 09:52  清霜一梦  阅读(157)  评论(0编辑  收藏  举报