作者:-54你懂不懂 | 来源:互联网 | 2023-02-05 16:06
我正在研究Ingenico的EDC终端.以下代码存在于先前的实现中.在调试时,我遇到了这块代码,我面临着难以理解的问题.
short bankPEM = 0;
//bankPEM = 41; //Chip
bankPEM = 17; //Swipe
//bankPEM = 801; //Fallback
switch(bankPEM)
{
case 021: cout<<"021"; break; //Swipe
case 051: cout<<"051"; break; //Chip
case 801: cout<<"801"; break; //Fallback
default: cout<<"Default"; break;
}
bankPEM
是一个短变量.我发现下面的执行观察:
当它包含时41
,case 051
执行.
当它包含时17
,case 021
执行.
当它包含时801
,case 801
执行.
我期望代码执行default
数字1和2的情况.在这种情况下,任何人都可以显示一些亮点.
我也将代码转换为汇编语言.调试汇编代码后,我将分享我的理解.
提前致谢.
1> LPs..:
参考c标准
6.4.4.1整数常量
十进制常量以非零数字开头,由一系列十进制数字组成.八进制常量由前缀0组成,可选地后跟一个数字0到7的序列.十六进制常量由前缀0x或0X后跟一个十进制数字序列和字母a(或A)到f(或F)分别由值10到15组成.
强调我的
由于显示的代码似乎是c ++,你也可以参考c ++ 14
2.13.2整数文字
整数文字是一个没有句点或指数部分的数字序列,可选地分隔单引号,在确定其值时会被忽略.整数文字可以具有指定其基数的前缀和指定其类型的后缀.数字序列的词汇第一个数字是最重要的.二进制整数文字(基数为2)以0b或0B开头,由一系列二进制数字组成.八进制整数文字(基数为8)以数字0开头,由一系列八进制数字组成.十进制整数文字(十进制)以0以外的数字开头,由一系列十进制数字组成.十六进制整数文字(基数为16)以0x或0X开头,由十六进制数字序列组成,包括十进制数字和字母a到f和A到F,十进制值为十到十五.[例子:12号可以写成12,014,0XC或0b1100.文字1048576,1'048'576,0X100000,0x10'0000和0'004'000'000都具有相同的值. - 结束例子]
强调我的