关于java程序二进制数转换为十进制数代码的问题

public static void main(String args[])
{
String s = "101011110001";
int value = "101011110001".charAt(0) - '0';
for (int i = 1; i < "101011110001".length(); i++)
{
value = value * 2 + "101011110001".charAt(i) - '0';
}
}

这个语句 “value = value * 2 + "101011110001".charAt(i) - '0';”,是怎么来的,是根据什么原理编写的。