首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么字符只有8位大小?

为什么字符只有8位大小?
EN

Stack Overflow用户
提问于 2017-12-28 12:48:47
回答 5查看 865关注 0票数 0

在大多数标准系统中,一个字符的大小是8位。利用香农方程:

8位= log2N

N必须等于256。

然而,在Unicode表上有超过256个字符。在我的编译器上,当我运行以下代码行时:

代码语言:javascript
复制
char c = static_cast<char> (257);

cout << c;

我看到一个未知的字符打印在屏幕上,但仍然有一个字符。

但是,我已经运行了一些测试,在一个文件中放置了许多字符,并且文件的大小与char =8位比相对应。

因此,一个字符似乎是8位(至少在我的系统上),但我仍然看到在257及以上的屏幕上打印的东西,以及unicode表上有比256更多的字符。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-12-28 13:20:30

charC++标准保证为1字节。请记住,它并不表示大小为8位,因为并不是每个系统上的语句byte = 8 bits都是真的。为了解释一下,假设我们只谈论8位字节。

首先,当你写:

8 bits = log2NN must equal 256

你是正确的。8位可以表示256不同的值,而Unicode包含的字符比这多,这与问题无关。char并不是用来表示所有可能存在的字符。它表示可以解释为256https://www.juniper.net/documentation/en_US/idp5.1/topics/reference/general/intrusion-detection-prevention-custom-attack-object-extended-ascii.html的不同值之一。

然而,在Unicode表上有超过256个字符。在我的编译器上,当我运行以下代码行时: char c= static_cast (2 5 7);cout << c; 我看到一个未知的字符打印在屏幕上,但仍然有一个字符。

但是,您是否尝试过确定static_cast<char>(257)返回什么?

代码语言:javascript
复制
char c = static_cast<char>(257);
std::cout << static_cast<int>(c);

将打印1,,当我们深入到Unicode (或ASCII)表中时,我们可以看到这个值表示航向开始字符。这是一个不可打印的字符,它将导致一个未定义的字符出现在控制台上(需要确认这是否是真正的未定义字符)。

为了打印范围更广的字符,请考虑使用wchar_t (这很可能是16位,因此它可以覆盖65536个值)和std::wstring来对应它。

票数 4
EN

Stack Overflow用户

发布于 2017-12-28 13:11:25

由于历史原因,Char是8位。在开发C程序时,大多数输出都在哑终端上。哑终端根据ASCII字符编码显示字符。ASCII字符在0-255之间.这处理了大多数可打印的英文字符。考虑到所有的语言,有超过256个字符。开发了额外的字符编码。Unicode是一个,UTF-8是另一个.

票数 1
EN

Stack Overflow用户

发布于 2017-12-28 13:25:53

一个字符大小总是8位,这不是强制性的。char依赖于在limits.h s.h中定义的CHAR_BIT变量。大多数系统的CHAR_BIT值通常为8,但实际值取决于特定的系统和库实现。您可以找到有关fin.h头文件这里的更多详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48007829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档