新鸟问题之002:char,signed char,unsigned char

renyaoming2020 2010-10-29 03:47:08
#include <iostream>
int main()
{
int d;
std::cin>>d;

char a=d;
signed char b=d;
unsigned char c=d;

std::cout<<"a="<<a<<std::endl
<<"b="<<b<<std::endl
<<"c="<<c<<std::endl;
return 0;
}
输了很多次,abc的结果都一样,难道三种类型没区别吗,如果有区别,char默认是signed还是unsigned ?(用的是VS2005)
...全文
64 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cunyan_0519 2010-10-29
  • 打赏
  • 举报
回复
换个d的值试试吧。同情你,但是我也不确定的。这三个类型的范围不同。char -128~127
signed char -128~127
unsigned char 0~255,如果你输出的数是这三个类型的公共范围内,当你输出看不出不同的。

int d;
std::cin>>d;
hustleverpi 2010-10-29
  • 打赏
  • 举报
回复
char到底是signed还是unsigned,这个是由编译器决定的。
VC下,是signed。检查办法是
char c = 0;
if (--c < 0)
cout << "signed" << endl;
else
cout << "unsigned" << endl;

但是,编程时还是有一些细节需要注意。比如有重载函数
void fun(signed char c);
void fun(unsigned char c);
但是,如果你这样写
int main(int argc, const char* argv[])
{
char c = 0;
fun(c);
}
会报错,VC报错:对重载函数的调用不明确
renyaoming2020 2010-10-29
  • 打赏
  • 举报
回复
如何知道自己的编译器char默认是signed还是unsigned
ma100 2010-10-29
  • 打赏
  • 举报
回复
输个负数就不一样
大部分默认signed, 有的编译器比如arm, 默认unsigned
renyaoming2020 2010-10-29
  • 打赏
  • 举报
回复
问题很幼稚吗,没人回答吗,可是对于我们这种新手,这个问题就摆在面前,真的不会

64,684

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧