l******d 发帖数: 530 | 1 考虑这个函数
void foo(char c){
...
}
如果用户传递个大于127的值给c,比如 foo(128),在foo里c是溢出的,得到的值是-
128。如果用户在调用foo前判断传给c的值是不是大于127或小于-128很容易,有没有办
法在foo里检测传给c的值是溢出的呢,就是说,不依赖于函数的用户去检测溢出。 |
l*********8 发帖数: 4642 | 2 应该没有办法。 foo()知道的就是char, 不知道之前有没有经过数据类型转换。
【在 l******d 的大作中提到】 : 考虑这个函数 : void foo(char c){ : ... : } : 如果用户传递个大于127的值给c,比如 foo(128),在foo里c是溢出的,得到的值是- : 128。如果用户在调用foo前判断传给c的值是不是大于127或小于-128很容易,有没有办 : 法在foo里检测传给c的值是溢出的呢,就是说,不依赖于函数的用户去检测溢出。
|
l******d 发帖数: 530 | 3 用inline assembly,测试Overflow flag应该可以,但面试题应该不至于考那么细节吧
【在 l*********8 的大作中提到】 : 应该没有办法。 foo()知道的就是char, 不知道之前有没有经过数据类型转换。
|
h*****f 发帖数: 248 | 4 Hmm...a char can hold 0x0-0xFF. 128=0x80...so no overflow..
I guess the question is to detect whether the input occupies more than 1
byte?
You probably could *if* it were foo(char*) or foo(char&). |
f*******n 发帖数: 12623 | 5 "unsigned char" can hold 0 - 255
"signed char" can hold -128 to 127
"char" can be either signed or unsigned char, depending on the
implementation
【在 h*****f 的大作中提到】 : Hmm...a char can hold 0x0-0xFF. 128=0x80...so no overflow.. : I guess the question is to detect whether the input occupies more than 1 : byte? : You probably could *if* it were foo(char*) or foo(char&).
|
h*****f 发帖数: 248 | 6 right, remembered when I hit my bed..lol |
i*****r 发帖数: 265 | 7 You should not consider this case. Caller should ensure that. Plus, compiler
should warn on your input. |