C++ 位移
最近看源代码 里面有好多位移的,请教下
uint8 i = 0;
uint8 c = 0;
uint8 cnt = 0;
int8 n[PHONE_SPACE_NUMBER_LEN];
if((len >> 1) > num_len)
{
*status = CMD_PARAM_ERROR;
return;
}
for(i = 0; i < len; i++)
{
c = (data[i] & 0x0f);
if((c > 9) && (c != 0x0f))
{
*status = CMD_PARAM_ERROR;
return;
}
if(c == 0x0f)
{
n[cnt++] = '\0';
break;
}
n[cnt++] = c + '0';
c = ((data[i] >> 4) & 0x0f);
if((c > 9) && (c != 0x0f))
{
*status = CMD_PARAM_ERROR;
return;
}
if(c == 0x0f)
{
n[cnt++] = '\0';
break;
}
n[cnt++] = c + '0';
}
for(i = 0; i < cnt; i++)
{
num[i] = n[i];
}
}
这个data数组里面是不超过15位的电话号码,
1:怎么len>>1 len值是8啊 数字怎么也位移?(第7行)
2为什么要判断这个: if((c > 9) && (c != 0x0f)).这C与9有什么关系?
uint8 i = 0;
uint8 c = 0;
uint8 cnt = 0;
int8 n[PHONE_SPACE_NUMBER_LEN];
if((len >> 1) > num_len)
{
*status = CMD_PARAM_ERROR;
return;
}
for(i = 0; i < len; i++)
{
c = (data[i] & 0x0f);
if((c > 9) && (c != 0x0f))
{
*status = CMD_PARAM_ERROR;
return;
}
if(c == 0x0f)
{
n[cnt++] = '\0';
break;
}
n[cnt++] = c + '0';
c = ((data[i] >> 4) & 0x0f);
if((c > 9) && (c != 0x0f))
{
*status = CMD_PARAM_ERROR;
return;
}
if(c == 0x0f)
{
n[cnt++] = '\0';
break;
}
n[cnt++] = c + '0';
}
for(i = 0; i < cnt; i++)
{
num[i] = n[i];
}
}
这个data数组里面是不超过15位的电话号码,
1:怎么len>>1 len值是8啊 数字怎么也位移?(第7行)
2为什么要判断这个: if((c > 9) && (c != 0x0f)).这C与9有什么关系?
...全文
相关推荐
C++整数位移操作差异[代码]
本文详细探讨了C++中有符号和无符号整数在位移操作(左移和右移)中的行为差异。无符号整数的位移是逻辑移位,空出的位补0;而有符号整数的位移则采用算术移位,右移时空出的位补符号位。文章通过具体示例解释了这两种位移操作的行为,并指出了在实际开发中需要注意的事项,如避免对有符号整数进行右移依赖、警惕位移后的未定义行为等。理解这些差异对于编写正确的位运算代码至关重要。
位移操作与传统乘法:C++性能比较实验
本文还有配套的精品资源,点击获取 简介:在编程中,性能优化是关键,特别是对计算密集型任务。本文探讨了在C++中通过位移操作优化乘法执行效率的方法,并与传统乘法操作进行了性能比较。位移操作,包括左移和右移,在理论上有更高的执行速度,因为它们是硬件级别的操作,而且现代编译器可以自动优化简单的乘法为位移操作。然而,对于复杂情况,如负数和浮点数的乘法,位移操作则不适用。文章通过代码...
循环位移算法C++代码实现
循环位移算法C++代码实现
整数的循环位移.cpp
用c语言实现简单的整数的循环位移,提供输入输出
松下小型激光位移传感器串口通讯API例程C++
松下小型激光位移传感器HL-G系列,485、422串口通讯API例程C++,包含DLL文件和头文件,文件齐全可用


