我已多次签名溢出,但每次都是turbo c环绕。 例如:
#include <stdio.h>
void main() {
int i = 100000;
printf("%d", i);
getch();
}
输出为-31072
,如果完成环绕,则为预期输出。
在二进制100000(dec)
中是11000011010100000
,最后16位是存储的
是1000011010100000
。在两个补语表示中1000011010100000
是-31072
。
答案 0 :(得分:2)
您的示例没有包含任何已签名的溢出,因此没有未定义的行为。
(假设INT_MAX小于100000。)
作业:
@RunWith(PowerMockRunner.class)
@PrepareForTest(tests.class)
public class test {
@Test
public void test() throws Exception {
File fileMock = Mockito.mock(File.class);
PowerMockito.whenNew(File.class).withArguments(Mockito.anyString(), Mockito.anyString()).thenReturn(fileMock);
FolderServiceImpl sut = new FolderServiceImpl sut ();
Mockito.when(fileMock.exists()).thenReturn(true);
sut.getStatus("");
// Your verifications..
}
}
执行从long类型(类型为整数常量100000)到int类型的隐式转换。转换结果是实现定义的 1 (或实现定义的陷阱是信号)。
1 (引自:ISO / IEC 9899:201x 6.3.1.3有符号和无符号整数3)
否则,新类型将被签名,并且值无法在其中表示;无论是
结果是实现定义的或引发实现定义的信号。