标题：bc
贝拉胶原
BC是广大BellaColla家族成员对日本著名胶原蛋白品牌BellaColla的昵称。
BellaColla是英文Bella与Collagen（胶原蛋白）的混合缩写。
在西班牙语里，Bella（Isabella的简称）意味着 “对上帝的承诺”，而在英语里， Bella则蕴含着漂亮、美丽之意。BellaColla用心传递“美丽从自然开始”的思想，并帮助消费者达成美丽梦想，这正是专注于胶原蛋白领域的BellaColla对我们的“上帝”— 每一个爱美之人的郑重承诺。
公元前
公元前则以 B.C.（英文 Before Christ 的缩写，意为“基督以前”）表示，通常写在年份之公元前。顾名思义就是公元元年之前。
公元是个纪年法，咱们通俗所说的公元2011年就是从公元元年开始算起两千零一十一年，那公元前的意思就是两千零一十一年以前。
银行
the Peoples' Bank of China  中国人民银行中国人民银行是1948年12月1日在华北银行、北海银行、西北农民银行的基础上合并组成的。1983年9月，国务院决定中国人民银行专门行使国家中央银行职能。1995年3月18日，第八届全国人民代表大会第三次会议通过了《中华人民共和国中国人民银行法》，至此，中国人民银行作为中央银行以法律形式被确定下来。
BC
即为连线机台控制器，负责收集机台的制程数据，在制品信息，同时能向机台下控制指令，为CIM系统下的一个底层的系统，广泛运用于TFT-LCD制造行业，汽车制造业。
BC的经典架构为由三菱的MELSECNET/H或CC-Link网络组成机台（PLC）到机台(PLC)的网络，再加一个主控站PLC和PC,BC主控程式在PC中运行，通过主控站PLC各机台通信。
当前比较有名的BC系统方案提供商有IBM日本,韩国的AIM,以及台湾的羽冠电脑。
BC命令
LINUX命令
用途
为任意精度算术语言提供解释器。BC的含义是：Binary Calculator，用于实现任意精度计算（往往是高精度计算）。
语法
bc [ -c ] [ -l ] [ File ... ]
描述
bc 命令是一个提供任意精度算术的交互式进程。bc 命令首先读取由 File 参数指定的任一输入文件，然后读取标准输入。输入文件必须是包含 bc 命令能读取并执行的命令序列、语句或函数定义的文本文件。
bc 命令是 dc 命令的预处理程序。除非指定 -c（仅编译）标志，否则它自动调用 dc 命令。如果指定了 -c 标志，则来自 bc 命令的输出转到标准输出。
bc 命令允许您来指定十进制、八进制或十六进制的运算的输入和输出进制。缺省值为十进制。此命令还提供了十进制点符号的比例缩放规定。bc 命令始终使用 .（点号）来表示基数点，而不考虑指定为当前语言环境部分的任何十进制点字符。
bc 命令的语法类似于 C 语言的语法。可以使用 bc 命令通过将 ibase 关键字指定给输入进制而 obase 关键字指定给输出进制来在各进制间转化。2 到 16 的范围对于 ibase 关键字是有效的。obase 关键字的范围从 2 直到 /usr/include/sys/limits.h文件中定义的 BC_BASE_MAX 值设置的限制。不考虑 ibase 和 obase 的设置，bc 命令将字母 A 到 F 识别为其十六进制值 10 到 15。
bc 命令的输出由读取程序控制。输出由包含所有执行的未赋值表达式的值的一行或多行构成。输出的基数和精度由 obase 和 scale 关键字的值控制。
有关 bc 命令处理来自源文件信息的方式的进一步的信息在以下各节中得到描述：
* 语法
* 词法约定
* 标识符和运算符
* 表达式
* 语句
* 函数调用
* -I 数学库中的函数
语法
以下语法描述了 bc 程序的语法，其中 program 代表任何有效的程序：
%token EOF NEWLINE STRING LETTER NUMBER
%token MUL_OP
/* '*', '/', '%' */
%token ASSIGN_OP
/* '=', '+=', '-=', '*=', '/=', '%=', '^=' */
%token REL_OP
/* '==', '<=', '>=', '!=', '<', '>' */
%token INCR_DECR
/* '++', '--' */
%token Define Break Quit Length
/* 'define', 'break', 'quit', 'length' */
%token Return For If While Sqrt
/* 'return', 'for', 'if', 'while', 'sqrt' */
%token Scale Ibase Obase Auto
/* 'scale', 'ibase', 'obase', 'auto' */
%start program
%%
program : EOF
| input_item program
;
input_item : semicolon_list NEWLINE
| function
;
semicolon_list : /* empty */
| statement
| semicolon_list ';' statement
| semicolon_list ';'
;
statement_list : /* empty */
| statement
| statement_list NEWLINE
| statement_list NEWLINE statement
| statement_list ';'
| statement_list ';' statement
;
statement : expression
| STRING
| Break
| Quit
| Return
| Return '(' return_expression ')'
| For '(' expression ';'
relational_expression ';'
expression ')' statement
| If '(' relational_expression ')' statement
| While '(' relational_expression ')' statement
| '{' statement_list '}'
;
function : Define LETTER '(' opt_parameter_list ')'
'{' NEWLINE opt_auto_define_list
statement_list '}'
;
opt_parameter_list:/* empty */
| parameter_list
;
parameter_list : LETTER
| define_list ',' LETTER
;
opt_auto_define_list
: /* empty */
| Auto define_list NEWLINE
| Auto define_list ';'
;
define_list : LETTER
| LETTER '[' ']'
| define_list ',' LETTER
| define_list ',' LETTER '[' ']'
;
opt_argument_list : /* empty */
| argument_list
;
argument_list : expression
| argument_list ',' expression
;
relational_expression
: expression
| expression REL_OP expression
;
return_expression : /* empty */
| expression
;
expression : named_expression
| NUMBER
| '(' expression ')'
| LETTER '(' opt_argument_list ')'
| '-' expression
| expression '+' expression
| expression '-' expression
| expression MUL_OP expression
| expression '^' expression
| INCR_DECR named_expression
| named_expression INCR_DECR
| named_expression ASSIGN_OP expression
| Length '(' expression ')'
| Sqrt '(' expression ')'
| Scale '(' expression ')'
;
named_expression : LETTER
| LETTER '[' expression ']'
| Scale
| Ibase
| Obase
;
词法约定
以下词法约定适用于 bc 命令：
1. bc 命令识别最长的可能的词法标记或在给定点开始的定界符。
2. 以 /*（斜杠、星号）开始并以 */（星号、斜杠）结束的注释。注释仅对定界词法标记有效。
3. 将换行字符识别为 NEWLINE 标记。
4. STRING 标记表示一个字符串常量。字符串以 "（双引号）开头并以 "（双引号）终止。引号间的所有字符都按照字面取出。无法指定包含 "（双引号）的字符串。每个字符串的长度限制为 limits.h 文件中定义的 BC_STRING_MAX 值设置的最大字节数。
5. 空白字符仅当出现在 STRING 标志中或用来定界词法标记时才有效。
6. \n（反斜杠、换行）字符：
* 定界词法标记。
* 解释为 STRING 标记中的一个字符序列。
* 当作为多行 NUMBER 标记的一部分时被忽略。
7. NUMBER 标记使用以下语法：
NUMBER : integer
| '.' integer
| integer '.'
|integer '.' integer
;
integer : digit
| integer digit
;
digit : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
| 8 | 9 | A | B | C | D | E | F
;
NUMBER 标记在 ibase 内部寄存器值指定的进制中解释为数字。
8. NUMBER 标记的值解释为由 ibase 内部寄存器的值指定的进制的数字。每个数字字符具有值 0 到 15（以这里列出的顺序排列），且句号字符表示基点。如果数字大于或等于出现在标记中的 ibase 寄存器的值，则行为未定义。对于指定给 ibase 和 obase 寄存器自己的单个位数的值，有一个例外。
9. 将以下关键字识别为标记：
auto for length return sqrt
break ibase obase scale while
define if quit
10. 除了在关键字中，以下任何字母都看作是一个 LETTER 标记：
a b c d e f g h i j k l m n o p q r s t u v w x y z
11. 将以下单字符和双字符序列识别为 ASSIGN_OP 标记：
* =（等号）
* +=（加号、等号）
* -=（减号、等号）
* *=（星号、等号）
* /=（斜杠、等号）
* %=（百分号、等号）
* ^=（插入记号、等号）
12. 将以下单字符识别为 MUL_OP 标记：
* *（星号）
* /（斜杠）
* %（百分号）
13. 将以下单字符和双字符序列识别为 REL_OP 标记：
* ==(双等号）
* <=（小于号、等号）
* >=（大于号、等号）
* !=（感叹号、等号）
* <（小于号）
* >（大于号）
14. 将以下双字符序列识别为 INCR_DECR 标记：
* ++（双加号）
* --（双连字符）
15. 将以下单字符识别为标记。标记和字符具有相同的名称：
<newline>
(（左圆括号）
)（右圆括号）
,（逗号）
+（加号）
-（减号）
;（分号）
[（左方括号）
]（右方括号）
^ (插入记号)
{ (左花括号)
} (右花括号)
16. 当到达输入末尾时，返回 EOF 标记。
标识符和运算符
bc 命令可识别的标识符有三种：普通标识符、数组标识符和函数标识符。所有三种类型包含单个小写字母。数组标识符后跟 [ ]（左和右方括号）。除了在参数中或自动列表中，数组下标是必需的。数组是单维构成的，且最多可包含 BC_DIM_MAX 值指定的数量。索引从 0 开始。所以数组从 0 开始建立索引值到 BC_DIM_MAX -1 定义的值。下标截断为整数。函数标识符必须后跟 ( )（左和右圆括号）并可能包含自变量。这三种标识符不冲突。
bc 程序表的运算符总结了优先规则和所有运算符的关联性的规则。同一行上的运算符具有相同的优先权。行以递减优先顺序排列。
bc 程序中的运算符
运算符 关联性
++, - - 不适用
unary - 不适用
^ 从右至左
*, /, % 从左至右
+,二进制 - 从左至右
=, +=, -=, *=, /=, ^= 从右至左
==, <=, >=, !=, <, > 无
每个表达式或命名表达式具有一个小数位，它是表达式小数部分要保留的十进制数字的位数。
命名表达式是存储值的位置。命名表达式在赋值的左边是有效的。命名表达式的值是存储于指定位置的值。简单的标识符和数组元素是命名表达式；它们具有一个为零的初始值和一个为零的初始小数位。
内部寄存器 scale、ibase 和 obase 都是命名表达式。包含这些寄存器之一的名称的表达式的小数位是 0。指定给这些寄存器任意之一的值将截断为整数。scale 寄存器包含一个用于计算表达式小数位的全局值（如下描述）。scale 寄存器的值限制为 0 <= scale <= 并具有一个缺省值 0。ibase 和 obase 寄存器分别是输入和输出数字的基数。ibase 的值限制为 2 <= ibase <= 16。obase 的值限制为 2 <= obase = 。
当为 ibase 或 obase 寄存器指定了“词法约定”中描述的列表中的单个位数的值时，该值假定为十六进制。例如：
ibase=A 
设置到底数十，而不考虑当前的 ibase 寄存器值。其它情况下，如果数字大于或等于出现在输入中的 ibase 寄存器的值，则行为未定义。ibase 和 obase 寄存器都具有初始值 10。
内部计算就像十进制（不考虑输入和输出底数）一样进行到指定的小数位个数。当没有得到精确的结果，例如：
scale=0; 3.2/1
bc 命令截断此结果。
obase 寄存器的所有数字值根据以下规则输出：
1. 如果值小于 0，输出 -（连字符）。
2. 输出以下内容之一，这取决于数字值：
* 如果数字值的绝对值大于或等于 1，则输出作为适合 obase 寄存器的一系列数字的值的整数部分（在步骤 3 中描述）。下一步输出最重要的非零数字，每个数后跟连续的较不重要的数字。
* 如果数字值的绝对值小于 1 但大于 0，且数字值的小数位大于 0，则不指定是否输出字符 0。
* 如果数字值是 0，则输出字符 0。
3. 如果该值的小数位大于 0，则输出 .（点号）后跟一系列适合以下 obase 寄存器值的数字。这些数字表示值的小数部分的最重要的部分，且 s 表示正在输出的值的小数位：
* 如果 obase 值是 10，则输出 s 位的数字。
* 如果 obase 值大于 10，输出小于或等于 s 位的数字。
* 如果 obase 值小于 10，则输出大于或等于 s 位的数字。
* 对于值不是 10 的 obase 值，这应该是要表示 10 的精度所需的数位。
* 对于值为 2 到 16 的 obase 值，有效的数字是单字符的第一个 obase：
0 1 2 3 4 5 6 7 8 9 A B C D E F
这分别表示值 0 到 15。
* 对于大于 16 的底数，每个数字写作分开的多位数的十进制数字。除了最重要的小数数字，每个数字前有一个空格字符。对于底数 17 到 100，bc 命令写二位十进制数字，对于底数 101 到 1000，bc 命令写三位的十进制数。例如，底数 25 的十进制数 1024 将写作：
01 15 24
底数 125，如：
008 024
超大数字分行分割，在 POSIX 语言环境中每行 70 个字符。其它语言环境可能在不同的字符边界分割。要继续的行必须以 \ (反斜杠) 结束。
表达式
数字常量是一个表达式。小数位是表示常量的输入中的小数点后面的数位，或 0（如果没有小数点）。
序列（expression）是具有和 expression 相同值和小数位的表达式。括号可以用来更改正常的优先顺序。
一元和二元运算符具有以下语义：
-expression 结果是表达式的负数。结果的小数位是表达式的小数位。
一元增量和减量运算符不会修改它们运算的命名表达式的小数位。结果的小数位是该命名表达式的小数位。
++named_expression 命名表达式按 1 递增。结果就是增量后的命名表达式的值。
- -named_expression 命名表达式按 1 递减。结果就是减量后的命名表达式的值。
named_expression++ 命名表达式按 1 递增。结果就是增量前的命名表达式的值。
named_expression- - 命名表达式按 1 递减。结果就是减量前的命名表达式的值。
乘方运算符 ^ (插入记号) 从右至左绑定。
expression ^expression 结果是 expression 升到第二个 expression 的乘幂。如果第二个表达式不是整数，则行为未定义。如果 a 是左边表达式的小数位且 b 是右边表达式的绝对值，则结果的小数位是：
if b >= 0 min(a * b, max(scale, a))
if b < 0 scale
乘法运算符 *（星号）、/（斜杠）和 %（百分号）从左至右绑定。
expression * expression 结果是两个表达式的乘积。如果 a 和 b 是两个表达式的小数位，则结果的小数位是：
min(a+b,max(scale,a,b))
expression / expression 结果是两个表达式的商。结果的小数位是 scale 的值。
expression % expression 对于表达式 a 和 b，a % b 等同以下步骤来求值：
1. 计算 a/b，保留当前小数位。
2. 请使用结果来计算：
a - (a / b) * b
至小数位：
max(scale + scale(b), scale(a))
结果的小数位将是：
max(scale + scale(b), scale(a))
当 scale 为零时，% 运算符是数学余数运算符。
加法运算符 +（加号）和 -（减号）从左至右绑定。
expression + expression 结果是两个表达式的和。结果的小数位是表达式的小数位的最大值。
expression - expression 结果是两个表达式的差。结果的小数位是表达式的小数位的最大值。
以下赋值运算符从右到左绑定：
* =（等号）
* +=（加号、等号）
* -=（减号、等号）
* *=（星号、等号）
* /=（斜杠、等号）
* %=（百分号、等号）
* ^=（插入记号、等号）
named-expression = expression 这个表达式最终将右边的表达式的值指定给左边的命名表达式。命名表达式和结果的小数位都是表达式的小数位。
复合赋值格式：
named-expression <operator >= expression
等同于：
named-expression = named-expression <operator > expression
除了命名表达式仅求值一次。
与其它所有运算符不同，以下关系运算符仅作为 if 或 while 语句的对象或在 for 语句中时才有效：
* <（小于号）
* >（大于号）
* <=（小于号、等号）
* >=（大于号、等号）
* ==（双等号）
* !=（感叹号、等号）
expression1 < expression2 如果 expression1 的值严格小于 expression2 的值，则关系为真。
expression1 > expression2 如果 expression1 的值严格大于 expression2 的值，则关系为真。
expression1 <= expression2 如果 expression1 的值小于或等于 expression2 的值，则关系为真。
expression1 >= expression2 如果 expression1 的值大于或等于 expression2 的值，则关系为真。
expression1 == expression2 如果 expression1 的值和 expression2 的值相等，则关系为真。
expression1 != expression2 如果 expression1 的值和 expression2 的值不相等，则关系为真。
语句
当语句是一个表达式时，除非主运算符是一个赋值，否则语句的执行写出表达式的值后跟一个换行字符。
当语句是一个字符串时，语句的执行写出字符串的值。
以分号或换行字符隔开的语句按序执行。在 bc 命令的交互式调用中，每次读取一个满足语法生成的换行字符：
input_item : semicolon_list NEWLINE
构成 semicolon_list 的语句的有序列表将立即执行，且该执行产生的任何输出写出时没有任何缓冲区延迟。
如果是 if 语句（if (relation) statement），则当关系为真时执行该 statement。
while 语句（while (relation) statement）实现其中测试 relation 的循环。每次 relation 为真时，则执行statement 并测试 relation。当 relation 为假时，执行在 statement 之后恢复。
for 语句（for (expression; relation; expression) statement）与下面形式相同：
first-expression
while (relation) {
statement
last-expression
}
所有三个表达式都必须存在。
break 语句使 for 或 while 语句终止。
auto 语句（auto identifier [,identifier ] ...）使标识符的值减小。标识符可以是普通标识符或数组标识符。数组标识符由后跟空的方括号的数组名指定。auto 语句必须是在函数定义中的第一个语句。
define 语句：
define LETTER ( opt_parameter_list ) {
opt_auto_define_list
statement_list
}
定义名为 LETTER 的函数。如果先前定义了 LETTER 函数，则 define 语句取代先前的定义。表达式：
LETTER ( opt_argument_list )
调用 LETTER 函数。如果调用中自变量的数量与定义中参数的数量不匹配，则行为未定义。在调用函数之前先定义它。函数看作是在它自己主体内定义，这样循环调用就是有效的。当调用函数时，函数内数字常量值以 ibase 寄存器的值指定的底数来解释。
return 语句（return 和 return (expression)）使函数终止，弹出它的 auto 变量，并指定函数的结果。第一个格式等同于返回 0。函数的调用的值和小数位是括号中表达式的值和小数位。
quit 语句（quit）在输入中的语句出现位置停止 bc 程序的执行，即使它出现在函数定义中或出现在 if、for 或 while 语句中。
函数调用
函数调用由函数名称，后跟包含在括号内的以逗号隔开的表达式列表（这些表达式是函数自变量）组成。作为自变量传递的整个数组由后跟 [ ]（左方括号和右方括号）的数组名称指定。所有函数自变量按值传递。所以对形式参数的更改不会影响实际参数的效果。如果函数通过执行 return 语句终止，则函数的值是 return 语句的圆括号中的表达式的值，或如果不提供表达式或没有 return 语句则为零。
sqrt(expression) 的结果是表达式的平方根。结果在最不重要的小数位置截断。结果的小数位是表达式的小数位或 scale 的值中较大的一个。
length(expression) 的结果是表达式中重要十进制数的总数。结果的小数位是 0。
scale(expression) 的结果是表达式的小数位。结果的小数位是 0。
bc 程序中仅有两种存储类，即全局和自动（本地）。只有对函数而言是本地的标识符需要用 auto 关键字说明。函数的自变量对函数而言是本地的。所有其它标识符假定为全局并可用于所有函数。所有标识符，全局和本地，具有初始值 0。声明为 auto 的标识符在进入函数时分配并在从函数返回时释放。所以它们不在函数调用之间保留值。auto 数组由后跟 []（左方括号、右方括号）的数组名指定。进入函数时，作为参数和自动变量出现的名称的旧值被推上堆栈。函数返回之前，对这些名称的引用仅引用新值。
在那些函数之一使用本地变量的同一个名称之前，从此函数调用的其它函数对这些名称中的任何一个的引用也引用新值。
-l 数学库中的函数
当指定 -l 标志时，定义以下函数：
s(expression) 指定 expressionx 的正弦，其中 expression 是弧度。
c(expression) 指定 expressionx 的余弦，其中 expression 是弧度。
a(expression) 指定 expressionx 的反正切，其中 expression 是弧度。
l(expression) 指定 expression 的自然对数。
e(expression) 指定 expression 的幂。
j(expression,expression)
指定整数顺序的 Bessel 函数。
当调用函数时，对这些函数的每一个的调用的小数位是 scale 关键字的值。如果用数学函数域之外的自变量来调用这些函数中的任何一个，则行为未定义。
标志
-c 编译 File 参数，但不调用 dc 命令。
-l （小写 L）定义数学函数的库，并将 scale 变量设置为 20。
退出状态
该命令返回以下退出值：
0 成功完成。
1 遇到语法错误或不能访问输入文件。
unspecified 有其它错误发生。
示例
1. 可以使用 bc 命令作为计算器。根据您是否设置了 scale 变量以及设置了什么值，系统显示小数数量。请输入：
bc
1/4
仅显示 0。要设置 scale 变量并添加注释，请输入：
scale = 1 /* Keep 1 decimal place */
1/4
屏幕显示 0.2。输入：
scale = 3 /* Keep 3 decimal places */
1/4
显示 0.250。输入：
16+63/5
显示 28.600。输入：
(16+63)/5
显示 15.800。输入：
71/6
显示 11.833。
当按下 Enter 键时，bc 命令显示除了赋值以外的每个表达式的值。
当从键盘直接输入 bc 命令表达式，请按文件结束符（Ctrl-D）按键顺序来结束 bc 命令会话并返回至 shell 命令行。
2. 要编写并运行类似 C 语言的程序，请输入类似于以下命令的命令：
bc -l prog.bc
e(2) /* e squared */
ma
屏幕显示 7.38905609893065022723。如果输入：
f(5) /* 5 factorial */
屏幕显示 120。如果输入：
f(10) /* 10 factorial */
屏幕显示 3628800。
此序列解释保存在 prog.bc 文件中的 bc 程序，并从键盘读取更多的 bc 命令语句。用 -l 标志启动 bc 命令将使数学库可用。此示例使用来自数学库中的 e（幂）函数，且 f 在 prog.bc 程序文件中定义为：
/* compute the factorial of n */
define f(n) {
auto i, r;
r = 1;
for (i=2; i<=n; i++) r =* i;
return (r);
}
跟在 for 或 while 语句后的语句必须在同一行开始。当从键盘直接输入 bc 命令表达式时，请按文件结束符（Ctrl-D）按键顺序来结束 bc 命令会话并返回至 shell 命令行。
3. 要将中缀表达式转换为“逆向 Polish 表示法”（Reverse Polish Notation，RPN），请输入：
bc -c
(a * b) % (3 + 4 * c)
屏幕显示：
lalb* 3 4lc*+%ps.
此序列将 bc 命令中缀表示表达式编译为 dc 命令可以解释的表达式。dc 命令对扩展 RPN 表达式求值。在编译后的输出中，每个变量名称前的 l 是将变量的值装入到堆栈上的 dc 子命令。p 显示在堆栈顶端的值，s. 通过将顶端的值存储在寄存器 .（点）来废弃它。可以将 RPN 表达式保存在文件中以使 dc 命令以后通过重定向此命令的标准输出来求值。当从键盘直接输入 bc 命令表达式，请按文件结束符（Ctrl-D）按键顺序来结束 bc 命令会话并返回至 shell 命令行。
4. 要在 shell 中将 pi 的前 10 位数的近似值指定给变量 x，请输入：
x=$(printf "%s\n" 'scale = 10; 104348/33215' | bc)
以下 bc 程序将 pi 的相同近似值（带有标号）打印到标准输出：
scale = 10
"pi equals "
104348 / 33215
5. 要定义一个函数来计算幂函数（如果指定了 -l（小写 L）选项则此类函数为预定义的）的近似值，请输入：
scale = 20
define e(x){
auto a, b, c, i, s
a = 1
b = 1
s = 1
for (i = 1; 1 == 1; i++){
a = a*x
b = b*i
c = a/b
if (c == 0) {
return(s)
}
s = s+c
}
}
要打印前 10 个整数的幂函数的近似值，请输入：
for (i = 1; i <= 10; ++i) {
e(i)
}
文件
/usr/bin/bc 包含 bc 命令。
/usr/lib/lib.b 包含数学库。
/usr/bin/dc 包含桌面计算器。
战舰
战列巡洋舰是一种20世纪初兴建的一种大型战舰。是在装甲巡洋舰的基础上演变过来的一种功能性很强的新型主力舰。 英国广布全球的通过漫长海上航运线和商业网络相互联系的殖民利益，需要强大并且可以快速集结的海军舰队保护。英国皇家海军需要一种强大火力与高机动力相结合的战舰，不仅可以有效的打击敌方的袭扰，又能够快速部署应付突发性事件。于是英国海军以“理想型巡洋舰”名义设计的战列巡洋舰是一种把战列舰强大火力和装甲巡洋舰高机动结合在一起的战舰，当时新的技术提供了建造新型战舰的可能性。战列巡洋舰与装甲巡洋舰之间最大的区别在于武装。战列巡洋舰的主炮口径比装甲巡洋舰大。从主炮口径大小和威力方面战列巡洋舰可以与战列舰媲美，但防护装甲比战列舰薄。装甲方面省下来的重量被用在更强大的驱动装置上，这为战列巡洋舰提供了更高的速度。
设计战列巡洋舰的主导思想其可以轻而易举地击毁巡洋舰，因为其主炮使它在进入巡洋舰的射程内之前就已经可以对敌舰发起进攻。而它的高航速使它可以逃避敌人的战列舰，或在海战中袭击对方已经被损坏的战列舰。
世界上最早的战列巡洋舰是英国的不屈号、无敌号、坚定号战列巡洋舰（即无敌级战列巡洋舰）。所有三艘船都是在1907年下水。它们的船体和炮塔装甲厚度为6或7英寸（150毫米或180毫米），而相应的战列舰的装甲为11英寸或12英寸（280毫米或300毫米）。它们的航速可达26节（48千米/小时），而当时相应的战列舰的航速为20节到21节（37千米到39千米/小时）。它们的火炮口径为12英寸（305毫米），这与同期的战列舰相当。 继英国之后，德国很快也建造了自己的战列巡洋舰。1911年冯?德?坦恩号战列巡洋舰下水。德国战列巡洋舰的火炮口径比英国的略小，火炮口径为11英寸（283毫米）。但它们的装甲比当时英国战列巡洋舰的装甲好一些。
在实战中，战列巡洋舰很少能够象它们设计时所想象的那样单独行动。在大多数情况下，一支舰队的司令总是认为他的舰队的火力越大越好。而将战列巡洋舰的火炮加入自己的舰队的想法是非常诱人的。因此战列巡洋舰往往加入舰队中进行海战。但这些战舰不是为这样的舰队作战设计的，在这样的舰队作战中它们无法发挥它们的速度优势，它们自己却暴露到很大的危险中。它们的速度无法保护它们逃避战列舰的大炮。
在第一次世界大战的福克兰群岛海战中战列巡洋舰证明它们本来所设计时的战术设想是正确的。在这次战役中英国的坚定号和无敌号战列巡洋舰消灭了一支德国在南大西洋的巡洋舰舰队。而这正是战列巡洋舰的作战目的。
18个月后在日德兰海战中一支英国的战列巡洋舰舰队试图在英国主舰队到达之前与德国的战列巡洋舰和战列舰作战，其结果是一次惨败。英舰玛丽女王号、不倦号和无敌号爆炸沉没，除少数人外几乎全部舰员丧生。雄师号被迫淹没自己的弹药库来避免同样的结局。德国战列巡洋舰的装甲虽然强一些，但它们的结局并不好多少。吕佐夫号战列巡洋舰被击沉，塞德利茨号战列巡洋舰被重创。在这次海战中，除一艘德国老式战列舰外英、徳的战列舰没有一艘被击沉。
此后英国海军放弃了战列巡洋舰的战术。1918年下水的胡德号战列巡洋舰是英国建造的最后一艘战列巡洋舰。在两次世界大战之间，胡德号是世界上最大的主力舰。它的装甲比过去的战列巡洋舰强，可是在装甲的设计和安排上面依旧保持先前的缺点，在某些角度下炮弹可以轻易贯穿。在第二次世界大战中，它在与德国俾斯麦号战列舰炮战时爆炸沉没，而当时她已经预定要进行相关的改装。
世界上没有海军再建造战列巡洋舰了。日本将现有的金刚级战列巡洋舰改造为“高速战列舰”，美国海军将两艘战列巡洋舰的船体改为航空母舰。列克星顿号和萨拉托加号本来设计是战列巡洋舰，建造中途因限制海军军备条约的签定而改造为航空母舰。后来美国建造了两艘类似战列巡洋舰的“大型巡洋舰”阿拉斯加号、关岛号。在太平洋战争中它们表现并不出色，战后其它四艘本来计划建造的类似舰艇被放弃了。这两艘船装备12英寸口径主炮，它们的装甲也是为了对付12英寸口径主炮。这与过去的英国战列巡洋舰不同：英国舰艇装备了同时代战列舰装备的12英寸口径主炮，但她们的装甲无法对抗它们自己的武器。
德国的“装甲舰”是另一个类似战列巡洋舰的方案。它们不是轻型的战列舰，而是非常重火力的巡洋舰。它们体形比较小，装有六门11英寸口径主炮，它们不是使用蒸汽机作为动力，而是使用8台九缸柴油机。航速可以达到28节（52千米/小时）。它们参加的唯一的一次比较重要的战役是第二次世界大战中的拉普拉塔河口海战。德国还造过两艘被称为战列巡洋舰的战舰：沙恩霍斯特号、格奈森瑙号，主要被用做巡洋作战，而类似战列巡洋舰的特点，但它们的装甲比传统的战列巡洋舰要强，使用11英寸口径主炮。它们类似法国建造的敦刻尔克号、斯特拉斯堡号战列舰，更象轻型战列舰(light battleships)。
新型的战舰技术也使得战列巡洋舰很快就无用武之地了。战列舰的重装甲只减慢了几节的速度（一般4千米/小时）。而航空母舰的出现使战列舰和战列巡洋舰都失去了往日的威力。如同当时的爱荷华级战列舰，它们的航速证明它们是优良的航空母舰护卫舰和炮轰陆地的舰艇，但它们已经不适合于它们本来的设计目的：海上决战。
有人将苏联20世纪八十年代的四艘基洛夫级导弹巡洋舰划入战列巡洋舰，但实际上它们是重型导弹巡洋舰。
其它含义
BC 匈牙利最大化工集团博苏化学公司（BorsodChem），现已被万华实业集团收购[1]
BC 著名演员（Benedict Cumberbatch本尼迪克特·康伯巴奇）的简称
BC 奔驰跑车
BC 单机游戏Bloody Call的简称
bc看上去是连续的字母,其实是骂人的脏话,是白痴的意思,是网络用语,在腾讯\MSN中常见
BC指英国文化协会，即 British Council 的缩写
BC BitComet的简称 
BC加拿大不列颠哥伦比亚省简称BC省 
BC 网络语言，表示“棒槌”
B代表Before,在...之前的意思
C代表Christ,基督的意思.
西方以基督出生的年份为公元1年,所以在此之前就叫公元前.
所以习惯上常用BC或B.C.代表公元前. 
BC: Business Customer ，商业(企业)客户。
BC：Boston College的缩写
BC：鼻臭（一种病症，鼻子呼出恶臭气体）的拼音缩写。
BC：Business Consultant 商业顾问
BC:在电子电路中作为"音频传感器",可用来检测盗情.比如:其在声控式防盗报警器电路
BC:在最近热播的美剧<gossip girl>中指Blair和Chuck这对情侣，也有CB之称。
BC：Bad Company的简写，即叛逆连队。
BC：在登山运动中指“大本营”（BASE CAMP）。
星际争霸(Starcraft)中, BC是神族炮台(Photon Cannon), 人族基地(Command Center) 和虫族的Creep Colony.
blair和chuck(13张)乳腺癌 (Breast Cancer, 在下文中,简称BC).
公元前(=Before Christ)=BC
波士顿大学（Boston College）
边策 （bian ce）
广播（Broadcast的简写），也指一些广播相关的芯片。
网络词汇
就是汉语拼音白痴，用于骂人的。在网游中经常出现。
BC是隐形眼镜的基弧
BC=Black Cat(漫画《黑猫》）
游戏
叛逆连队《战地：叛逆连队》（Battlefield: Bad Company），是一款EA DICE开发，美国艺电于2008年发布的一款第一人称射击游戏。《战地：叛逆连队》是“战地”系列游戏中的第6款作品。《战地：叛逆连队》首次应用了EA DICE自主研发的新一代寒霜引擎，该引擎不仅提供了出色的画面效果，还支持规模宏大的破坏效果，使得游戏中大多数建筑、物品、树木甚至地面都可以被破坏。与以往的战地系列游戏不同，该作的单人游戏部分比重较大。在剧情战役中，玩家扮演的也不再是一本正经的军人，而是时常嬉笑打闹，甚至为了金钱脱离组织的士兵。叛逆连队2《战地：叛逆连队2》（Battlefield: Bad Company 2），是EA DICE开发的一款第一人称射击游戏。游戏开发商美国艺电确定2010年3月2日为游戏Xbox 360、PS3、PC版的首发日期。该游戏是EA DICE开发的第9款“战地”系列作品，也是《战地：叛逆连队》的直接续作，在继承前作特性的基础上，强化了多人联机载具对战和团队合作元素的设定。游戏使用加强版的寒霜引擎，加入了建筑物框架破坏和物体分块破坏的支持。
俱乐部
Boys' Club简称BC 少年俱乐部.是由Johnny'sJr担纲演出，集合歌舞表演、访谈及游戏于一身的综艺节目。第一期节目是在2000年4月9日播放。
由日本NHK电视台放送，原为周日18:00~18:50 2010年调整为周五 基本每月放送两期，3月和8月为总集篇，每月一期。
少俱的主持阵容与嘉宾阵容都是非常豪华的，很多日本当红组合的成员都参加过此节目，例如日本杰尼斯事务所旗下的“NEWS”、“KAT-TUN”和“Hey!Say!JUMP”等组合，以及生田斗真等影视明星。    
边界时钟
1588v2有3种时钟模式：普通时钟（OC）、边界时钟（BC）和透明时钟（TC）。OC通常是网络始端或终端设备，该设备只有一个1588端口且只能作为Slave（从端口）或Master（主端口）。BC是网络中间节点时钟设备，该设备有多个1588端口，其中一个端口可作为Slave，设备系统时钟的频率和时间同步于上一级设备，其他端口作为Master，可以实现逐级的时间传递。
BC模式
BC模式又可分为带外和带内两种。图1所示为BC带外模式，主时钟是RNC/BTS，与主时钟直接相连的PTN节点A通过外时间同步接口1PPS（PulsePerSecond，秒脉冲）+TOD（TimeofDate）接口同步到RNC/BTS，其后主从同步链上各个节点采用BC模式同步其上一个节点，实现逐级同步。在图1中假设已建立三条主从同步链，即A－D－E、A－D－C－F和A－D－C－F－G　，主从同步链的建立可通过BMC算法自动生成或通过人工配置完成。
以主从同步链A－D－C－F－G为例分析，可看出BC带外模式特点为：  
⑴ 主从同步链的首尾节点（A、G）运行OC模式，其中节点A运行主PTP模式，节点G运行从PTP模式，其余中间节点运行BC模式，RNC、基站可不用支持1588v2协议处理；
⑵ 它是一个逐级同步的过程，节点D同步到A，然后节点C再同步到D，依此类推，最终实现NodeB和RNC的时间同步；
⑶ PTN中主从端口数量一样，即有一个主端口就有一个从端口；
⑷ 每条链路上的PTP包流量与网络节点数无关；
⑸ 同步链的建立需要人为指定或运行PTP中的BMC算法；
⑹ 若出现节点失效的情况，1588v2可采用BMC算法自动重新建立备用主从同步链，实现时间同步路径的自动倒换。
与BC带外模式相比，带内模式下PTN与RNC、基站的同步接口为PTP接口，此时RNC、基站必须支持PTP处理，并运行OC模式，其中RNC运行主PTP模式，NodeB运行从PTP模式。其余方面同BC带外模式。[2]