相关疑难解决方法(0)

为什么字符数组在C++中接受非ASCII字符?

所以,我希望能够在我的C++程序中使用中文字符,并且我需要使用某种类型来保存超出ASCII范围的字符.

但是,我尝试运行以下代码,它工作正常.

    #include <iostream>

    int main() {
      char snet[4];
      snet[0] = '?';
      snet[1] = '?';
      snet[2] = '?';
      std::cout << snet << std::endl;
      int conv = static_cast<int>(snet[0]);
      std::cout << conv << std::endl; // -96
    }
Run Code Online (Sandbox Code Playgroud)

这是没有意义的,因为sizeof(char)在C++中,对于g ++编译器,求值为1,但中文字符不能用单个字节表示.

为什么这里的汉字被允许被安置在一个char类型?

在C++中应该使用什么类型来容纳中文字符或非ASCII字符?

c++ string unicode

5
推荐指数
1
解决办法
579
查看次数

C位数组宏,谁能解释我这些如何工作?

我正在尝试为学校项目实施erathostenes的筛选,我决定使用位数组来实现.在我搜索材料时,我遇到了这三个宏,它们完美无缺,但我无法真正阅读(理解)它们.

#define ISBITSET(x,i) ((x[i>>3] & (1<<(i&7)))!=0)
#define SETBIT(x,i) x[i>>3]|=(1<<(i&7));
#define CLEARBIT(x,i) x[i>>3]&=(1<<(i&7))^0xFF;
Run Code Online (Sandbox Code Playgroud)

能否请你详细解释其中至少一个,我对C中的按位操作有基本的了解(基本上我知道它们"存在").

这会在另一个使用不同字节序的架构上工作吗?提前致谢.

c macros bitarray

4
推荐指数
1
解决办法
1102
查看次数

C中的隐式整数类型转换

我理解C语言在整数和浮点类型之间的隐式转换,但我对签名/无符号隐式类型转换有疑问.

例如,如果添加a unsigned char 和a signed int,结果类型是什么?它会是a unsigned int,a signed int还是别的什么?

我没有看到C99 ANSI标准中有任何具体内容,所以任何帮助都表示赞赏.

c implicit-conversion

4
推荐指数
1
解决办法
4983
查看次数

字节类型:std::byte vs std::uint8_t vs unsigned char vs char vs std::bitset&lt;8&gt;

C++ 有很多类型模糊地描述相同的事物。假设我们正在针对一个字节为 8 位的架构进行编译,则以下所有类型都大致相似:

  • std::byte
  • std::uint8_t
  • std::bitset<8>
  • unsigned char(8 位)
  • char(8 位)

如果一个字节是 8 位,那么所有这些类型或多或少可以互换吗?如果没有,什么时候需要使用一个而不是另一个?

我经常在 Stack Overflow 上看到诸如将十六进制字符串转换为字节数组之类的问题,其中有人使用std::uint8_tcharunsigned char其他类型来表示“字节”。这只是风格偏好的问题吗?


注意:此问答旨在成为社区常见问题解答,鼓励进行编辑。std::byte尽管 C++17 已经引入了这似乎使得选择变得显而易见,但何时使用“字节”的类型以及为什么的问题始终出现。std::bitset提供一个常见问题解答来解决有关、std::uint8_t等作为“字节”的所有误解是很有用的。鼓励编辑。

c++ byte c++17 std-byte

4
推荐指数
1
解决办法
933
查看次数

Intel 64 (EM64T)系统上char类型的大小

我听说某些 64 位系统上有 16 位长字符类型。Intel 64 (EM64T) 系统上的 char 类型的大小是多少?

c c++ 64-bit

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

是否保证size_t,vector :: size_type等typedef不会绑定到char类型?

cstdinttypedef 肯定可以绑定到char变量.例如,它很可能uint_least8_t与之结合unsigned charint_least8_t结合signed char.

标准是否保证类似的东西不会发生size_t或类似的类型?或者至少有一个纯理论上的机会,这些类型将绑定到某些字符类型,unsigned char甚至可能wchar_t

c++ size-t char

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

一个字节中的位数 - C 标准

为什么像字节中的位数这样基本的东西仍然由 C 标准实现定义?有没有这可能有用的例子?

从 C99,3.6(可在此处链接

3.6 字节

数据存储的可寻址单元足够大,可以容纳执行环境基本字符集的任何成员

注 1:可以唯一地表达对象的每个单独字节的地址。

注 2:一个字节由连续的位序列组成,其数量由实现定义。最低有效位称为低位;最高有效位称为高位。

编辑:我问的是一些基本问题,为什么 C 标准在字节大小的位数方面提供了灵活性。不更具体地询问 sizeof(char) CHAR_BIT != 8 有什么好处。如果问题仍然看起来重复,请否决它,我将关闭问题。

c implementation-defined-behavior

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

Python中的字节总是八位字节吗?

可能存在断言失败的Python实现:

assert all(byte in range(256) for byte in any_bytes_object) # Python 3 semantics 
assert all(byte in range(256) for byte in map(ord, any_bytes_object)) # Python 2
Run Code Online (Sandbox Code Playgroud)

POSIX明确指定CHAR_BIT == 8(每字节8位).Python中有类似的保证吗?它在某处记录了吗?

Python 2引用说:"字符代表(至少)8位字节."

如果bytes没有定义name(在旧的Python版本上),例如,在Jython 2.5上,那么问题是关于str类型(bytestrings),即bytes = str在Python 2上.

python pypy jython language-lawyer micropython

2
推荐指数
1
解决办法
818
查看次数

为什么gcc不会为int和char生成类型不匹配警告?

为什么在gcc中编译以下代码不会产生任何类型不匹配警告?-1int类型,并f()期望类型为char:

void f(char c) {}
int main(void)
{
  f(-1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

即使我们明确指定了类型,也没有警告:

void f(unsigned char c) {}
int main(void)
{
  f((signed int)-1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

什么是好奇:如果我们指定超出范围的值,则打印警告:

void f(char c) {}
int main(void)
{
  f(65535);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

warning: overflow in implicit constant conversion

gcc版本6.1.1

c gcc-warning

2
推荐指数
1
解决办法
592
查看次数

C中16位与32位机器的int数据类型的大小

为什么int数据类型的大小在16位32位体系结构中是不同的,而其他原始数据类型在两种体系结构中具有相同的大小?

c primitive-types

2
推荐指数
1
解决办法
522
查看次数