我正在读的书中写道:
该标准没有定义如何表示有符号类型,但指定范围应在正值和负值之间均匀划分。因此,8 位有符号字符保证能够保存从 -127 到 127 的值;大多数现代机器使用允许值从 -128 到 127 的表示形式。
我推测 [-128;127] 范围源自称为“补码”的方法,其中负数为 !A+1(例如 0111 为 7,1001 为 -7)。但我无法理解为什么在一些较旧的(?)机器中值范围为[-127;127]。谁能澄清这一点吗?
为什么被true==151
认为是不安全的操作true==true
,而实际上持有相同的表达却不是.而且,为什么true==151
永远不可能是真的,不像true&&151
?
cout<<(true==151); //0 and it gives compiler warning C4806
cout<<(true==true); //1 no warning
if(true==151)cout<<"1"; //"0" and warning again
if(true&&151)cout<<"1"; //1 no warning
if(151)cout<<"1"; //1
Run Code Online (Sandbox Code Playgroud)
警告C4806本身
'==':不安全的操作:提升为类型'int'的类型'bool'的值不能等于给定的常量