为什么当你写的时候它会进入无限循环(char c=0;约<256;C++)?
Why does it go into an infinite loop when you write (char c=0;c<256;c++)?
代码如下:
for(char c=0;c<256;c++)
printf("hello");
为什么会进入无限循环?
这是因为在您的例子中,char
是一个8位整数。
所以char
只有-128
到127
的值,总是小于256
很可能您的char
数据类型限制为8位。如果默认的char
是有符号的,8位,并且你使用的是2 '补码,它将始终在-128..127
的范围内,因此将始终小于256。
如果unsigned 8位(编码无关紧要,因为它只影响有符号的数字),它将始终在0.255
范围内,因此也将始终低于256。
请注意,C没有强制要求2的补码,所以范围可能会有一点变化,但是在所有可能的编码和只有8位的情况下,它可以拥有的最大值是255
。
只有当你有超过8位可用时,char
才能够达到256。这是可能的,因为C只要求最小位数。您可以通过在<limits.h>
中查找CHAR_BITS
来检查您的实现提供了什么,但是,在绝大多数情况下,这将是8。
为完整起见,三种可能的C编码的8位范围为:
signed unsigned
========= ========
one's complement -127..127 0..255
sign/magnitude -127..127 0..255
two's complement -128..127 0..255
char
只能存储从0到255的值,如果它是无符号的,或者-128到127,如果它是有符号的,这取决于您的构建设置。无论哪种情况,它总是小于256。将1添加到最高值将使其绕行到最低值
正在循环字节。基本上,当你超过变量类型所能存储的最大容量时,它会自动换行并重新开始。
256不是char的最大保存数。它是一个字符可以表示的可能值的最大数量,这是两件非常不同的事情。
一个char是8位(在几乎所有的正常实现中)
8位类型可以保存256个不同的值。但是对于普通的有符号字符,这些可能的值在-128到127的范围内。
unsigned char仍然是8位,因此包含256个可能的值,但这些值的范围在0到255之间。
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 没有匹配的“运营商&lt;&lt;”