C++ int型如何分别对进行高16位和低16位的操作
展开全部
当移位位数大于或者等于数据类型的位数时,编译器会报告给你一个警告。
对于移位运算,如果移位位数大于或者等于数据类型的位数,则会使用余数进行移位,
例如
:int
i
=
8;
i
>>
34
,由于
int
为32位(一般情况下)
,而
34
>
32
,
所以
i
>>
34
将等同于
i
>>34%32,既
i
>>
2。
所以你的情况,
a
>>
0x20
实际上是
a
>>
0,既没有移位,所以结果仍为
1
对于移位运算,如果移位位数大于或者等于数据类型的位数,则会使用余数进行移位,
例如
:int
i
=
8;
i
>>
34
,由于
int
为32位(一般情况下)
,而
34
>
32
,
所以
i
>>
34
将等同于
i
>>34%32,既
i
>>
2。
所以你的情况,
a
>>
0x20
实际上是
a
>>
0,既没有移位,所以结果仍为
1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法1,用
&
运算取出
int
x,xl,xh;
xl
=
x
&
0x0000ffff;
xh
=
(x
&
0xffff0000)
>>
16;
方法2,用
union
typedef
union
{
unsigned
long
int
i;
//
或
int
i
unsigned
char
s[4];
}
IS4;
IS4
x;
x.i
--
32
bit
整数
x.s[0],x.s[1]
--
高(或低)16位
x.s[2],x.s[3]
--
低(或高)16位
对s
的加工,就对i加了工。
&
运算取出
int
x,xl,xh;
xl
=
x
&
0x0000ffff;
xh
=
(x
&
0xffff0000)
>>
16;
方法2,用
union
typedef
union
{
unsigned
long
int
i;
//
或
int
i
unsigned
char
s[4];
}
IS4;
IS4
x;
x.i
--
32
bit
整数
x.s[0],x.s[1]
--
高(或低)16位
x.s[2],x.s[3]
--
低(或高)16位
对s
的加工,就对i加了工。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询