类型转换
问题描述:
有人能告诉我什么这行代码做类型转换
*(a++) = (int)((value >> 16) & 0xFF) ;
*(a++) = (int)((value >> 8) & 0xFF) ;
*(a++) = (int)((value & 0xFF)) ;
据我所知,它会检查的价值,如果它是远远大于16它将它转换成int型,如果是多少小于8也是一样。但是& 0xFF
和*(a++)
做什么?
答
(值>> 16)
不,它不是更大。
It is shift right by 16 bits.
但是,将其分割为2倍,使其比以前小得多。
val&0xff makes a solution if it is divisible by 256. For example: if val&0xff is different than zero, than it is not divisible by 256
答
*(a++) = (int)((value >> 16) & 0xFF) ;
是这样的:
aIntValue = value/65536;
aIntBalue = a%256;
*(a++) = (int)((value >> 8) & 0xFF) ;
是这样的:
aIntValue = value/256;
aIntValue = a%256;
*(a++) = (int)((value & 0xFF)) ;
是这样的:
aIntValue = a%256;
在代码结束时,无论是码分配给aIntValut指向的值的指针“a”和旁边的指针移动到下一个元素。
答
考虑:
char data[10];
uint32_t value = 0x61626364; // 'abcd'
char *a = data;
*(a++) = (int)((value >> 24) & 0xFF);
*(a++) = (int)((value >> 16) & 0xFF);
*(a++) = (int)((value >> 8) & 0xFF);
*(a++) = (int)(value & 0xFF);
*(a++) = ':';
*((uint32_t *)a) = value;
a+=4;
*(a++) = 0;
printf("%s\n", data);
我得到(在我的英特尔盒子,里面是一个小端系统):
abcd:dcba
因此,这是确保一个整数的字节在一个平*立形式(选择big endian作为字节格式)。
现在,:
*(a++) = (int)((value >> 16) & 0xFF);
我们:
0x61626364 -- value
0x00006162 -- value >> 16 : shifted 2 bytes
0x00000062 -- (value >> 16) & 0xFF : last byte only
“_much_小” 是不是由计算机理解的术语。这是你理解的暗示'''并不意味着更小! – Shahbaz 2012-08-07 10:17:06
编程符号与数学符号不同。基本上在每种语言中,每个符号可以表示与其他语言意义非常相关的东西。 – c00kiemon5ter 2012-08-07 10:17:12