C++移位操作

比如说
int main()
{
int b,c;
BYTE a[] ={1,2,3,4,5};
b = (int) a[0];
cout << b <<endl;
c =a[2]<<16; //这里该怎么移位才能让a[2]=3 转换到 c时为300,要在计算机里面运算,要用16进制的方法,而不是c=(int)a[2] * 100用的是十进制!
cout << c <<endl;
return 0;
}
请高人讲解~~谢谢
“这个不是移位的问题,而是格式化输出的问题。 ” 能详细说下吗?

其实详细题目是这样的
byte a[1,2,3,4,5]
要取中间 a[1] a[2] a[3] 放进int里面,即int c=234 ,是要通过byte的位移和转换来实现~

/*
其实详细题目是这样的
byte a[1,2,3,4,5]
要取中间 a[1] a[2] a[3] 放进int里面,即int c=234 ,是要通过byte的位移和转换来实现~
*/
#include <iostream.h>

int main()
{
int b,c;
unsigned char a[] ={1,2,3,4,5};

c=((int)a[1]<<6) + ((int)a[1]<<5) + ((int)a[1]<<2) +((int)a[2]<<3) + ((int)a[2]<<1) + a[3];

cout << c <<endl;
return 0;
}
以上为你的要求
================
#include <iostream.h>

int main()
{
int b,c;
char a[] ={1,2,3,4,5};
b = (int) a[0];
cout << b <<endl;
c =((int)a[2]<<6) + ((int)a[2]<<5) + ((int)a[2]<<2);
cout << c <<endl;
return 0;
}
解释:
((int)a[2]<<6)移动6位相当于a[2]*64
((int)a[2]<<5)移动5位相当于a[2]*32
((int)a[2]<<2)移动2位相当于a[2]*4
所以等价于:c=a[2]*64+a[2]*32+a[2]*4=a[2]*100=300
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-11
无论怎么移位都不可能实现从 3 到 300,来看下面的二进制数据

3: 000000011
300:100101100

如果想使用位运算来实现从3 到 300的转换可以按下面的操作

300 = 3 << 2 | 100100000b

替换到你的程序里就是:

c = a[2] << 2 | 0x120; // 当a[2]=3时,c=300

针对补充问题:

我觉得这就是个简单的c = a[1] * 100 + a[2] * 10 + a[3]; 移位运算不是这么用的,你再和出题人确认下吧,是题出错了还是记错了。。。
第2个回答  2010-05-11
左移一次相当于乘以2
左移几次相当于乘以2的几次方
想用左移实现乘以100好像是不行
第3个回答  2010-05-11
这个不是移位的问题,而是格式化输出的问题。

关于c c++中的移位操作,是真正物理内存上的左移,右移,还是逻辑数字上的...
移位指令分为两种,一种是循环移位,一种是顺序移位(移位后空位会补零),对于32位机4字节的int值移位只要执行移位指令那么ALU(算术逻辑单元)会将需要移位的的物理内存中的数装入寄存器A,然后执行移位操作,

c\/c++的bit的左移右移移位操作详解(最新标准)
移位操作适用于整型或无范围的枚举类型,操作数可进行整型提升。左移操作符为 <<,它将第一个操作数的位向左移动指定的位数,即 num1 << num2。右移操作符为 >>,它将第一个操作数的位向右移动指定的位数,相当于将 x 除以 2^y,即 (x>>y)。若右移操作数为负数或大于左操作数的位范围,...

在c++位运算里什么是左移位和右移位
移位操作在程序设计中,位操作运算符的一种。1.在c++中,移位运算符有双目移位运算符:<<(左移)和(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。2.左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。3.右移运算是将一个二进制...

谁能帮我详细说明一下C++语言中关于移位的四种操作啊
C++不像JAVA,移位不保证是逻辑移位还是算术移位。不过多数编译器是算术移位。所以只有左移和右移两种。见:C语言的移位操作 参考资料:http:\/\/blog.chinaunix.net\/u1\/33888\/showart_334911.html

C++里面的移位、或这样的运算有什么意义?
移位可以用来替代乘除2,乘左移,除右移。每一位可以表示一种状态,1变0,0变1表示状态的改变。举个例子你就明白了,比如你有一个系统,有4个功能,都要设置打开及关闭。你可以用一个整数就表示4种功能分别打开关闭的各种组合了 以下数字全部二进制 1111表示都开 1110表示第四个关闭 0011表示第一二...

C \/ C ++中的左移和右移运算符
在C \/ C++编程中,左移和右移运算符是两位数操作的核心元素,用于处理数字的位级操作。左移运算符(<<)接受两个参数,第一个是被操作数,它会根据第二个参数(移位数)相应地位移。实际上,这等同于将第一个数乘以2的幂次方,即 x << y 等同于 x * 2^y。然而,这个操作对负数和位移幅度...

C++移位问题! cout<<hex<<(0x00000001<<(32 - offset))<<endl; cout<...
warning C4293: “>>”: Shift 计数为负或过大,其行为未定义 所以是全部移动为0,或者取余数看具体的编译器实现 VC6 是0 VC9,VC10是256 cout << hex << (0x00000001 << (32 - offset)) << endl;这个好像是取余数,如果把32变成int i=32好像也会取余数 cout << hex << (0x...

c++能对负数进行移位运算吗
在汇编里移位分算数移位和逻辑移位两种。你这里的右移明显是算数右移,也就是说,在每次向右移动后,补进的永远是“符号位”。对于正数补进的是0,对于负数补进的就是1。

C++中 << 和>>分别代表什么意思?注意:我说的是C++不是C
那是移位操作符 (<<和>>)将其左边操作数的位向左或者向右移动某些位,移到外面的位被丢弃。左移操作符从右边开始用0填充空位,右移操作符,如果是无符号数从左边开始插入0,否则它或者插入符号位的拷贝或者插入0,这由具体实现定义。如将整数a的第27位设为1:a |= 1 << 27;将第27为设为0...

c++中>>=什么意思
a=a>>1 即将a右移动1位。这时将a看成是2进制数就好理解了

相似回答