我知道C/C++标准只能保证每个字符最少 8位,理论上9/16/42 /其他任何东西都是可能的,因此所有关于编写可移植代码的网站都会警告不要假设8bpc.我的问题是"非便携式"这是真的吗?
让我解释.在我看来,有三类系统:
char不完全是 8位,我会感到非常惊讶.(如果我错了,请纠正我)char位数比8位多,我不会感到非常惊讶,但我还没有听说过一个这样的系统(如果我不知道的话,请再次通知我)底线:是否有共同的(大于%0.001)平台(在类别1和2以上),其中char是不是 8位?我的上述猜测是真的吗?
为什么C和C++中的基本类型没有像Java那样严格定义,其中a int始终为4个字节且long为8个字节等.据我所知,在C和C++中,只有a char被定义为1个字节,其他所有内容都由不同的编译器定义不同.所以int在C和C++中,只要它长于a short并且short更长,就不一定必须是4个字节char.
我只是想知道为什么会这样,它有用吗?
在C中bool(布尔)占用了多少空间?它是1位,1字节还是别的什么?程序是32位还是64位是否重要?
这是参考Stephen Prata的C++ Primer Plus的文本 -
字节表示测量单位意义上的8位存储器单元,用于描述计算机中的存储量.但是,C++以不同方式定义字节.C++字节至少包含足够的相邻位,以适应实现的基本字符集.
你能解释一下C++编译器是否有16位字节,而系统有8位字节,那么程序如何在这样的系统上运行?
在下面的程序中,第5行确实提供了 预期的溢出警告,但令人惊讶的是,第4行在GCC中没有给出任何警告:http://www.ideone.com/U0BXn
int main()
{
int i = 256;
char c1 = i; //line 4
char c2 = 256; //line 5
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在想这两行应该给出溢出警告.还是有什么我想念的?
导致我做这个实验的主题是:typedef类型检查?
在那里我说了以下(我从我的答案中删除了,因为当我运行它时,它没有像我预期的那样出现):
//However, you'll get warning for this case:
typedef int T1;
typedef char T2;
T1 x = 256;
T2 y = x; //possible overflow warning! (but it doesn't give warning :()
Run Code Online (Sandbox Code Playgroud) ISO C标准要求CHAR_BIT至少为8.
POSIX强制CHAR_BIT等于8,并且(几乎?)所有使用八位字节的网络和通信标准,是否有任何当代C实现CHAR_BIT> 8?
(注意:我对使用18或36位字的历史计算机体系结构不感兴趣.这是关于C的真正问题,因为它在当前的硬件上使用;考虑使用C99或更高版本的系统).
在c ++中,特别是cstdint头文件,有8位整数的类型,结果是具有typedef的char数据类型.任何人都可以建议一个实际的8位整数类型?
我正在尝试获取21个字节的数据,这些数据唯一地标识交易并将其存储在16字节char数组中.我无法为此提出正确的算法.
我正在尝试压缩的交易ID包含2个字段:
所以包含这些数据的C++类看起来像这样:
class ID
{
public:
char trade_num_[18];
char broker_[3];
};
Run Code Online (Sandbox Code Playgroud)
这些数据需要存储在16- char数据结构中,如下所示:
class Compressed
{
public:
char sku_[16];
};
Run Code Online (Sandbox Code Playgroud)
我试图利用这样一个事实:由于字符trade_num_只有0-127,每个字符中有1个未使用的位.类似地,999二进制是1111100111,它只有10位 - 比2字节字短6位.但是当我弄清楚我能把它压缩多少时,我能做到的最小值是17个字节; 一个字节太大了.
有任何想法吗?
顺便说一句,trade_num_用词不当.它可以包含字母和其他字符.这就是规范所说的.
编辑:抱歉混乱.该trade_num_字段确实是18个字节,而不是16.在我发布此帖子后,我的互联网连接已经死亡,直到现在我才回到这个线程.
EDIT2:我认为对数据集做出假设是安全的.对于trade_num_字段,我们可以假设不存在不可打印的ASCII字符0-31.ASCII码也不是127或126(〜).所有其他人可能都在场,包括大写和小写字母,数字和标点符号.这trade_num_将在集合中留下总共94个字符,包括ASCII代码32到125(包括端点).
每个C和C++标准是否允许sizeof数字类型不是 2的幂?
已知以下约束:
16 <= CHAR_BIT * sizeof(int) <= CHAR_BIT * sizeof(long)32 <= CHAR_BIT * sizeof(long) <= CHAR_BIT * sizeof(long long) 2 <= sizeof(int) && 4 <= sizeof(long)这是否意味着这sizeof(int) == 3 && sizeof(long) == 5是一种有效的行为?
如果是 - 是否有任何已知的编译器/架构以类似的方式运行?