<<=在c++中什么意思

如题所述

例如
c<<=2
就是 c=c<<2
把c左移2位得到的值 给 c

再如 a = 2
c<<=a + 3
+ 的优先级比<<=高
即c = c<<(a+3)
即c = c<< 5

C语言运算符优先级 详细列表
http://www.slyar.com/blog/c-operator-priority.html
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-13
位运算。。计算机都是二进制的嘛~左边有两个箭头说明向左移一位也就是在原来的基础上乘以2
第2个回答  2018-03-29
/**
* @找到表头往后的第一个可用位置的指针
*/
void findAddPos(){
if(head->next->cardNo!=0||head->next==head){
addPos=head;
return;
}

//if(addPos==head||addPos->next==head) return;

Card * temp=head->next;

while(temp->next!=head){

if(temp->cardNo+1!=temp->next->cardNo){
break;
}
temp=temp->next;
}
Card* temp1=head;
cout<<"findAddPos"<<endl;
do{
cout<<temp1->cardNo<<" ";
temp1=temp1->next;
}
while(temp1!=head);

addPos=temp;
}
/**
找到指定卡号的卡
*/
Card * findAppointedCard( int cardNo){
Card * temp=head->next;

while(temp!=head&&temp->cardNo!=cardNo){
temp=temp->next;
}
cout<<"find the appointed "<<temp->cardNo;
return temp;
}
/**
销毁指定卡号的卡
*/
void destroyAppointedCard(int cardNo){
Card * temp=findAppointedCard(cardNo);
cout<<"card will be deleted "<<temp->cardNo<<endl;
if(temp==head){
return;
}
cout<<"prev is "<<temp->prev->cardNo<<endl;
cout<<"next is"<<temp->next->cardNo<<endl;
cout<<"card was deleted "<<temp->cardNo<<endl;
//Card * prev=temp->prev;
//_ListDel((TListHead*)(temp->prev),(TListHead*)(temp->next));
Card * prev=temp->prev;
Card * next=temp->next;
next->prev=prev;
prev->next=next;
// ptNext->prev = ptPrev;
//ptPrev->next = ptNext;
temp->prev=NULL;
temp->next=NULL;
/**
Card* temp1=head;
do{
cout<<temp1->cardNo<<" ";
temp1=temp1->next;
}
while(temp1!=head);
*/
cardsNum[4]-=1;
cardsNum[temp->type]-=1;

free(temp);
findAddPos();

}
/*
@ 开卡,分配卡号和卡信息
@ 入参:enCard,卡类型; charge: 充值
@ 出参: cardNo, 分配的卡号
@ 返回值: EN_RETURN_SUCC,分配成功; EN_RETURN_CARD_OVERLOW, 分配失败;
*/
EN_RETURN_CODE AssignCard(unsigned int &cardNo, EN_CARD_TYPE enCard, unsigned int charge)
{
//单次充值超过999元,直接返回错误
if(charge > MAX_BALANCE){
return EN_RETURN_RECHARGE_OVERFLOW;
}
//办卡数量超过99张,直接返回错误
if(cardsNum[4]>=MAX_CARD_NUM){
return EN_RETURN_CARD_OVERLOW;
}
Card * temp=(Card *)malloc(sizeof(Card));
temp->balance=charge;
temp->type=enCard;

if(ListEmpty((TListHead*)head)){
ListAddHead((TListHead*)temp,(TListHead*)head);
temp->cardNo=0;
addPos=temp;
}else{

//插在addPos后面
ListAddHead((TListHead*)temp,(TListHead*)(addPos->next));
if(addPos!=head){
temp->cardNo=addPos->cardNo+1;
}
else{
temp->cardNo=0;
}
}

cardNo=temp->cardNo;

Card * temp1=head;

do{
cout<<temp1->cardNo<<" ";
temp1=temp1->next;

}
while(temp1!=head);

//需要找到可以插入的最小位置,考虑到单程卡可注销
findAddPos();

cardsNum[enCard]+=1;

cardsNum[4]+=1;
return EN_RETURN_SUCC;
}
/*
@ 卡扣费
@ 入参:cardNo,卡号; enCard, 卡类型; deductPrice, 扣费票价
@ 出参: balance, 扣费后的余额
@ 返回值: EN_RETURN_SUCC,成功; EN_RETURN_INVALID_CARD, EN_RETURN_BALANCE_NOT_ENOUGH, 失败;
*/
EN_RETURN_CODE DeductCard(unsigned int cardNo, EN_CARD_TYPE enCard, unsigned int deductPrice, unsigned int &balance)
{
Card *card = findAppointedCard(cardNo);
if (card == NULL) {
return EN_RETURN_INVALID_CARD;
}
EN_CARD_TYPE cardType;
//获取目前卡余额
GetCardInfo(cardNo, balance, cardType);
if (balance < deductPrice)
{
return EN_RETURN_BALANCE_NOT_ENOUGH;
}
balance = balance - deductPrice;
//消费
//consume[4]+=deductPrice;
//consume[enCard]+=deductPrice;

card->balance = balance;
if (enCard == EN_CARD_TYPE_SINGLE)
{
//注销
destroyAppointedCard(cardNo);
}
else if (balance < 20)
{
return EN_RETURN_BALANCE_TOO_LOW;
}

return EN_RETURN_SUCC;
}
第3个回答  2010-01-16
按位取反

10 00 01 10

取反后为

01 11 10 01

-----------------华丽丽的补充答案分割线----------

看来得详细给你分析一下数字的机内表示和机内存储方式。
你最好把你那个a的具体值是多少、类型是什么说一下。

对于最常见的32位有符号整型数,机内长度应该为4个Byte32位,且最高位表示符号为,0为正,1为负,因此1230应该表示为:

0000 0000 0000 0000 0000 0100 1100 1110

方便起见一半用十六进制表示

0x00 00 04 CE

按位取反后成为:

1111 1111 1111 1111 1111 1011 0011 0001 : 0xFFFFFB31

并不是-1230,而是-2147482417

如果是uint_8,即无符号8位整型:

00 00 10 00 (8)

按位取反后成为:

11 11 01 11( 247 而不是-8)

总之这个操作要根据对象具体分析。如果是浮点数更复杂。
第4个回答  2011-10-13
左移运算符

c++中 “<<=”符号什么意思?
<<是位左移,<<=与+=等符合赋值操作符相似,都是将运算结果给左边变量

c++中<<=是什么意识?
就是左移 << 是左移符号~比如 int a = 8;a <<= 2; 就是 a = a<<2 ;意思就是把a的位左移两位 a原来位 00001000 左移后变成 00100000 当然有四个字节 前面还有24位是0不会变~也就是32~多看看书上吧~

<<=在c++中什么意思
c<<=2 就是 c=c<<2 把c左移2位得到的值 给 c 再如 a = 2 c<<=a + 3 + 的优先级比<<=高 即c = c<<(a+3)即c = c<< 5 C语言运算符优先级 详细列表 http:\/\/www.slyar.com\/blog\/c-operator-priority.html

C++中<<=什么意思
C\/C++中有多个赋值运算符:=、+=、-=、*=、\/=、%=、>>=、<<=。除了=之外,其他的可以描述成为op=(op是操作符的编写)。a op= b相当于a=a op b,如a+=b,就相当于a=a+b。a<<=b相当于a=a<<b。<<是左移,如果不知道看看位运算的章节。

c++中<<=是什么意识?
实际是r = r << 1,就是将r 按位(bit)左移1,然后再将左移的结果赋值给r。 具体结果依赖r的类型(char, short , long等)。举个简单的例子,如果r是char型(8bit)值为3,二进制表示为r = 0000 0011(b),左移1位(r << 1)得到变为0000 0110,然后再赋值给r,最后r=6。

C++中=运算符和<<运算符有什么区别
<<是左移运算符号,是把操作数看成二进制数,然后左移指定的位数,生成新的值 而C++标准库的Stream类重载了<<运算符,使之成为流的输出符号 和=(赋值运算符)没有关系

c++中的&、|、^是什么意思?
a>>=b 表示把二进制a右移b位,比如:即:结果是1,再把右移结果赋值给a, 即最后a=1。<<= 同上,只不过是左移赋值。&= 是按位与之后赋值,^=是按位异或之后赋值,|=是按位或之后赋值。与,或以及异或的操作很简单:<<= 同上,只不过是左移赋值。&= 是按位与之后赋值,^=是按位异或...

C++或者C语言中的<?=是什么
->是箭头操作符,设计它的目的是为了简化输入,以及增强程序的可读性的 ->的功能相当于解引用操作符*和成员调用操作符.的组合体 例如:class C { static int a;} 访问a就可以使用C::a来访问,表明这个变量a具有类C的作用域。它在该类内可见。了解更多,那么namespace就是个很好的例子。另外。cla...

在c++ 中<<= 是什么意思
<<是输入吧,后面的等号是分开的吧!!!

...index |= 1” ,其中"<<=" 、"|=1"不是什么意思,请各位帮忙描述下...
两个都是赋值的符号了,<<=是先把index 左移1位 (例如index=00000001,经过左移一位后得index=00000010)再把它赋给index,|=1是先把index与1进行 位与运算 后再赋给index。希望对你有帮助,至于具体怎么用,自己根据我的说法去查资料吧。都是C语言的基本运算符里面的知识了 ...

相似回答