How about this? I try to reproduce the first five rows of your table.
\documentclass{article}
\usepackage{array}
% https://tex.stackexchange.com/a/12712/156344
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{table}
\caption{Some caption for the table}
\begin{tabular}{|C{2cm}|C{1cm}|C{1cm}|C{1cm}|C{2cm}|C{1.5cm}|} \hline
\multicolumn{4}{|c|}{imm[31:12]} & rd & 0110111 \\\hline
\multicolumn{4}{|c|}{imm[31:12]} & rd & 0010111 \\\hline
\multicolumn{4}{|c|}{imm[20\textbar10:1\textbar11\textbar19:12]} & rd & 1101111 \\\hline
\multicolumn{2}{|c|}{imm[11:0]} & rs1 & 000 & rd & 1100111 \\\hline
imm[12\textbar10:5] & rs2 & rs1 & 000 & imm[4:1\textbar11] & 1100011\\\hline
\end{tabular}
\end{table}
\end{document}

There is no syntax c{<width>}
for a centered column of fixed width.
If your version the array
package is 2.4f (2017/11/07) or newer you can use the column type w{<alignment>}{<width>}
that is
\begin{tabular}{|l|w{c}{4cm}|}
for a centered column of fixed width (this needs the array
package, of course). However, this overprints if the cell contents is wider than the width specified. And this would be the case for the table in your MWE.
I suggest to instead define a suitable paragraph column yourself:
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
This need the array
package, too, of course.
\documentclass[12pt]{book}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}
\begin{tabular}{|l|C{4cm}|}
\hline
Classe de caractère & Siginification\\
\hline
[abc$^\wedge$] & Un unique caractère qui peut être a, b ou c \\
\hline
$[^abc]$ & Le $^\wedge$ exprime la négation: cette classe représente un
unique caractère, qui peut prendre toutes les valeurs, sauf a,
b et c \\
\hline
\end{tabular}
\end{document}

If I understand you table correctly I also like to suggest not using mathmode but verbatim:
\documentclass[12pt]{book}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcommand\code[1]{\texttt{#1}}
\begin{document}
\begin{tabular}{|l|C{4cm}|}
\hline
Classe de caractère & Siginification\\
\hline
\verb+[abc^]+ & Un unique caractère qui peut être \code{a}, \code{b} et
\code{c} \\
\hline
\verb+[^abc]+ & Le \verb+^+ exprime la négation: cette classe représente un
unique caractère, qui peut prendre toutes les valeurs, sauf
\code{a}, \code{b} et \code{c} \\
\hline
\end{tabular}
\end{document}

Best Answer
The standard column types are
l
,c
,r
andp
which stands forleft aligned
,centered
orright alignment
andparbox
.Only the
p
- type can have a width argument, i.e.p{somewidth}
, wherewidth
can be specified with any dimensionTeX
/LaTeX
knows of.The
p
- type is effectively\parbox
which allows wrapping of text and content, which isn't possible (directly) in al
etc. type, for example anitemize
orenumerate
list.The
array
package provides for example for them
type which is meant for vertical ('middle') aligned. In addition to this,array
has the\newcolumntype
macro which allows to define other column types, however, based on the existing 'base' types, i.e.r
,l
,c
orp
.The
tabularx
package provides for theX
columntype and thesiunitx
enables to use theS
columntype.Here's a small sample code for showing the width effects:
\begin{tabular}{|p{4cm}|p{6cm}|}
will provide a tabular, that has the width of4cm + 5cm + 4\tabcolsep + 3\arrayrulewidth
, since each column has a left and right\tabcolsep
space, the later defaulting to6pt
; and there are three|
, so3\arrayrulewidth
lengths are added.In total, even
p{4cm}p{5cm}
will be wider than the expected9cm
.