<<=在c++中什么意思
5个回答
展开全部
例如
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<<=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
展开全部
位运算。。计算机都是二进制的嘛~左边有两个箭头说明向左移一位也就是在原来的基础上乘以2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/**
* @找到表头往后的第一个可用位置的指针
*/
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;
}
* @找到表头往后的第一个可用位置的指针
*/
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按位取反
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)
总之这个操作要根据对象具体分析。如果是浮点数更复杂。
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)
总之这个操作要根据对象具体分析。如果是浮点数更复杂。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
左移运算符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询