相关疑难解决方法(0)

可移植代码 - 每个字符的位数

我知道C/C++标准只能保证每个字符最少 8位,理论上9/16/42 /其他任何东西都是可能的,因此所有关于编写可移植代码的网站都会警告不要假设8bpc.我的问题是"非便携式"这是真的吗?

让我解释.在我看来,有三类系统:

  1. 计算机 - 我的意思是台式机,笔记本电脑,服务器等,运行Mac/Linux/Windows/Unix/*nix/posix /等等(我知道这个列表并不严格,但你明白了).听到任何这样的系统char完全是 8位,我会感到非常惊讶.(如果我错了,请纠正我)
  2. 带操作系统的设备 - 包括智能手机和此类嵌入式系统.虽然我发现这样一个系统的char位数比8位多,我不会感到非常惊讶,但我还没有听说过一个这样的系统(如果我不知道的话,请再次通知我)
  3. 裸机设备 - 录像机,微波炉,旧手机等.在这个领域我没有丝毫的经验,所以任何事情都可能发生在这里.但是,我真的需要我的代码在我的Windows桌面和微波炉之间跨平台吗?我可能有两个共同的代码吗?

底线:是否有共同的(大于%0.001)平台(在类别1和2以上),其中char不是 8位?我的上述猜测是真的吗?

c c++ bits char

27
推荐指数
2
解决办法
6086
查看次数

除了char之外,为什么sizeof内置类型在C&C++中依赖于编译器?

为什么C和C++中的基本类型没有像Java那样严格定义,其中a int始终为4个字节且long为8个字节等.据我所知,在C和C++中,只有a char被定义为1个字节,其他所有内容都由不同的编译器定义不同.所以int在C和C++中,只要它长于a short并且short更长,就不一定必须是4个字节char.
我只是想知道为什么会这样,它有用吗?

c c++ types

25
推荐指数
3
解决办法
2593
查看次数

在C中bool(布尔)占用了多少空间?它是1位,1字节还是别的什么?

在C中bool(布尔)占用了多少空间?它是1位,1字节还是别的什么?程序是32位还是64位是否重要?

c boolean

19
推荐指数
4
解决办法
6万
查看次数

根据计算机内存和C++来定义"字节"有什么不同?

这是参考Stephen Prata的C++ Primer Plus的文本 -

字节表示测量单位意义上的8位存储器单元,用于描述计算机中的存储量.但是,C++以不同方式定义字节.C++字节至少包含足够的相邻位,以适应实现的基本字符集.

你能解释一下C++编译器是否有16位字节,而系统有8位字节,那么程序如何在这样的系统上运行?

c++

16
推荐指数
2
解决办法
1155
查看次数

警告:隐式常量转换溢出

在下面的程序中,第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)

c++ gcc warnings overflow integer-overflow

15
推荐指数
2
解决办法
7万
查看次数

CHAR_BIT是> 8?

ISO C标准要求CHAR_BIT至少为8.

POSIX强制CHAR_BIT等于8,并且(几乎?)所有使用八位字节的网络和通信标准,是否有任何当代C实现CHAR_BIT> 8?

(注意:我对使用18或36位字的历史计算机体系结构不感兴趣.这是关于C的真正问题,因为它在当前的硬件上使用;考虑使用C99或更高版本的系统).

c byte char bit

15
推荐指数
3
解决办法
1117
查看次数

C++中是否存在实际的8位整数数据类型

在c ++中,特别是cstdint头文件,有8位整数的类型,结果是具有typedef的char数据类型.任何人都可以建议一个实际的8位整数类型?

c++ integer

15
推荐指数
1
解决办法
3万
查看次数

将21个字母数字字符压缩为16个字节

我正在尝试获取21个字节的数据,这些数据唯一地标识交易并将其存储在16字节char数组中.我无法为此提出正确的算法.

我正在尝试压缩的交易ID包含2个字段:

  1. 18个字母数字字符,由ASCII字符0x20到0x7E组成,包含.(32-126)
  2. 一个3个字符的数字字符串"000"到"999"

所以包含这些数据的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++ algorithm

14
推荐指数
2
解决办法
4034
查看次数

Java与C中的字符大小

为什么Java中的字符占用的空间是C中字符的两倍?

c java jvm character

14
推荐指数
1
解决办法
1万
查看次数

3字节int和5字节长?

每个C和C++标准是否允许sizeof数字类型不是 2的幂?

已知以下约束:

  • 16 <= CHAR_BIT * sizeof(int) <= CHAR_BIT * sizeof(long)
  • 32 <= CHAR_BIT * sizeof(long) <= CHAR_BIT * sizeof(long long)
  • 和其他十几个,在典型的8位字节架构上意味着 2 <= sizeof(int) && 4 <= sizeof(long)

这是否意味着这sizeof(int) == 3 && sizeof(long) == 5是一种有效的行为?

如果是 - 是否有任何已知的编译器/架构以类似的方式运行?

c c++ sizeof

13
推荐指数
2
解决办法
6126
查看次数

标签 统计

c++ ×7

c ×6

char ×2

algorithm ×1

bit ×1

bits ×1

boolean ×1

byte ×1

character ×1

gcc ×1

integer ×1

integer-overflow ×1

java ×1

jvm ×1

overflow ×1

sizeof ×1

types ×1

warnings ×1