java char类型怎么赋值_为什么char数据类型在为其赋值时会表现为int数据类型?...

我知道当我们为无符号数据类型赋值时,会存储它的两个补码,即数据类型可以存储的最大值减去我们分配的负值 . 为了测试它,我编写了一个程序来说明,但是我无法理解char数据类型的行为 .

#include

using namespace std;

template

void compare(T a,T b)

{

cout<

cout<

if(a>b)

cout<

else

cout<

}

int main()

{

unsigned short as=2;

unsigned short bs=-4;

compare(as,bs);

unsigned int al = 2;

unsigned int bl =-4;

compare(al,bl);

char ac=2;

char bc=-4;

compare(ac,bc);

int ai =2;

int bi =-4;

compare(ai,bi);

}

输出是

a:2 b:65532

a:2 b:fffc

b is greater than a

a:2 b:-4

a:2 b:fffffffc

b is greater than a

a:2 b:-4

a:2 b:fffffffc

a is greater than b

a:2 b:-4

a:2 b:fffffffc

a is greater than b

使用不同数据类型的参数调用compare(...)函数的次数

unsigned short- 2 bytes ,因此-4被存储为65532 .

unsigned int - 4 bytes ,但是因为我们试图在输出时将其强制转换为int,所以它在输出中显示为-4,因此它会欺骗编译器,但是十六进制输出和逻辑比较结果显示内部表示是两个恭维 .

char - 1 byte ,这是我感到困惑的地方 .

int - 4 bytes ,签名数据类型,没什么意外,正常结果 .

我要问的问题是为什么char表现得像一个有符号的int?即使我们在输出结果中的第一行之前将类型转换为int,为什么char显示类似于int的值,即使char是1字节和int 4字节 . unsigned short显示不同的值,因为它的内存要求是2字节 . unsigned int和int在结果的第一行显示相同的结果,因为两者都是4个字节,并且编译器被成功欺骗,并且是可接受的 . 但为什么char也显示相同的值,就好像它的内存布局与int的内存布局相同?

逻辑比较还表明char不是无符号数据类型,而是有符号数据类型 . 无符号数据类型显示b大于1 . 虽然char表示a大于b,但就signed数据类型而言 . 为什么?

不是char 1字节无符号数据类型?这是我在B.Tech学位攻读C和C课程时学到的 .

任何解释都会有所帮助 . 使用的编译器是mingw 2.19.1 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值