C语言中:char占1个字节,数值范围是-128到127. 我想问的是:char的数值范围为啥不是-128到128

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中:char占1个字节,数值范围是-128到127. 我想问的是:char的数值范围为啥不是-128到128相关的知识,希望对你有一定的参考价值。

一般在c/c++中,char是八位二进制位,所以是占一个字节
java中的编码是unicode16的,所以一个char是16位二进制位,所以占两个字节。
参考技术A char没有负数的吧
是0到255

byte类型的范围是-128到127
-128到128一共有257个数据(证书128个,负数128个,还有一个0)
八位二进制无法表示257个数据。
参考技术B 1个字节有256个状态。
-128~-1有128个状态。
0~127有128个状态。已经齐了。追问

明白了!可不可以再问你一个问题! int在我看的视频中说占2个字节,但在网上看到4个字节,何解!

追答

int 不一样的。
官方说法是int的字节数要在2~4字节。

它是依照编译器的默认设定来的。例如有的编译将它设2字节,有的将它设为4字节。

追问

那怎么知道编译器是将它设为几个字节呢?

追答

printf("%d",size(int));就行了。

本回答被提问者采纳
参考技术C 一个字节=8比特
2^8 = 256
如果是 -128 ~ 128 一共有 128*2 + 1 = 259 ( 那个1是指 0 )
习惯上都是 -128~127 而不是 -128~128 也不是 -127 ~ 128
参考技术D

char,是八位二进制位,只能表示 2^8 = 256 个数值。

-128~+128,这可是 257 个数值啊!

你太难为 char 了。

C语言结构体占用字节数及存储与空间分配

我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等。

在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子:

 

1.

struct A
{
  char a;
  int b;
  short c;
}str1;

这里char占1个字节,int占4个字节,short占2个字节,按单元存放如下图:

  1  2  3  4

a      
b b b b
c c    

 

 

 

由于a占用了1个字节,b存不下,所以开辟新的单元存放b,然后再开辟新的单元存放c。

从这里可以看出结构体在内存中是按单元存放的,总占用字节数就是3*4=12

 

2.

struct B
{
  char a;
  short c;
  int b;
}str2;

存放如图:

  1  2  3  4

a  
b b b b

 

 

 

在这里由于b占用4个字节,而a和c总共才占用3个字节,足够c存放,所以c存放在a的后面,再开辟新的单元存放b。

此例中占用字节数为2*4=8

 

3.

struct c
{
  char a;
  char b[2];
  char c[4];
}str3;

存放如图:

  1  2  3  4  5  6  7

a b b c c c c

 

 

这里由于数据类型都为char类型,故不必再开辟新的单元,一行存完。

占用字节数为1*1+2*1+4*1=7

 

综上所述,结构体在内存中存放是按单元存放的,所开辟单元的最大长度取决于占字节最大的数据类型,此外我们可以发现存储顺序对空间的使用率有一定的影响。

从以上三例可以看出,第一种最浪费空间;第三种最节省空间,但全使用相同类型,丢失了字段本生的数据类型,不方便使用;第二种介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。大家可以尝试用sizeof()去深入了解结构体中的按单元存放。

 

以上是关于C语言中:char占1个字节,数值范围是-128到127. 我想问的是:char的数值范围为啥不是-128到128的主要内容,如果未能解决你的问题,请参考以下文章

C语言char类型数据是否远远不止ASCII码

C语言中字符变量数值取值范围。

C语言,char字符型的取值范围是0-255,表示的是只有255字符(难道计算机只有255个字符吗)

char类型的取值范围是

java中的变量各占得字节数

byte和int,char类型有啥区别