<<是什么作用
编号:QA003742
建立日期: 2001年1月7日 最后修改日期:2003年5月18日
所属类别:
hejasi:
程序如下:
#include"stdafx.h"
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
int val1=256;
int result;
out<<"val="<<val1<<endl;
result=val1<<3;
cout<<"result="<<result<<endl;
return 0;
}
请问为什么结果会是2048,它的过程是怎样的?还有<<符号是有什么用的。
回答:
result=val1<<3这一行中的<<是将数按照二进制左移的意思。m<<n就是将m左移n次。左移一次相当于乘2,所以左移3次相当于乘8。256 <<3 = 256 * 8 = 2048。
柏超那么对于有符号数和无符号数,<<又是怎样处理的呢,这个和汇编里的循环移位指令有什么不同?
答:“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。右移运算符“>>”功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。大多数系统规定为补1。也就是说如果左操作数是一个无符号量,则移位是一个逻辑移位,否则是算术移位。移位的处理是依赖于编译系统的,不同的编译系统可能是不同的。
LIHONG的意见:
cout是ostream类的一个实例。它由C++自动产生。而“<<”是ostream类的运算符重载。参看C++的重载一章。
此问题由李海回答。
| |
|
|
| |
|
|