char的范围究竟是多少。

zjtzlqr 2013-03-03 02:22:15
百度百科里面讲
char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。

但是看过一本书说
char的范围是0-127
signed char的范围是-127到127
unsigned char的范围是0-255

char的范围不是应该是和unsigned char的范围一样都是0-127
...全文
3469 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
常如意 2013-03-20
  • 打赏
  • 举报
回复
引用 4 楼 starytx 的回复:
一个char占一个字节(8位),无符号的话那就是0~255,有符号就是-127~127,如果超出范围的话,一般会取一个对正常数目求模的值
++
Sheamus_ 2013-03-20
  • 打赏
  • 举报
回复
引用 19 楼 zhoujunfeng2340 的回复:
看看《C和指针》
char 0到127 signed char -127到 127 unsigned char 0到255
Sheamus_ 2013-03-20
  • 打赏
  • 举报
回复
看看《C和指针》
常如意 2013-03-19
  • 打赏
  • 举报
回复
一个char占一个字节(8位),无符号的话那就是0~255,有符号就是-127~127
ShengFei01 2013-03-05
  • 打赏
  • 举报
回复
signed char的范围是-128到127 unsigned char的范围是0-255
EACCD3B1 2013-03-05
  • 打赏
  • 举报
回复
引用 4 楼 starytx 的回复:
一个char占一个字节(8位),无符号的话那就是0~255,有符号就是-127~127,如果超出范围的话,一般会取一个对正常数目求模的值
这不就是正解么,为什么还要怀疑
Athenacle_ 2013-03-05
  • 打赏
  • 举报
回复
标准上说,unsigned char 和 signed char 和 char 是完全不兼容的三种类型。
leizh007 2013-03-04
  • 打赏
  • 举报
回复
楼上上还开小号轮流刷。。。
ForestDB 2013-03-04
  • 打赏
  • 举报
回复
其实理解了补码,signed/unsigned的差别不大。
zhao4zhong2 2013-03-04
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。 想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
赵4老师 2013-03-04
  • 打赏
  • 举报
回复
编译器的命令行参数可以指定char是默认signed/unsigned 电脑内存只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
mujiok2003 2013-03-04
  • 打赏
  • 举报
回复
标准: char,signed char, unsigned char是三个不同的类型,其取值范围是由编译器实现决定。这不同于int和singed int的关系,因为int等同于unsigned int.
bravery36 2013-03-04
  • 打赏
  • 举报
回复
标准我不太懂,但是vs系列的char默认是sign char,也可以改成unsign char,似乎没有char这种类型。
starytx 2013-03-04
  • 打赏
  • 举报
回复
引用 楼主 zjtzlqr 的回复:
百度百科里面讲 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。 但是看过一本书说 char的范围是0-127 signed……
他所说的0~127应该是指可显示字符的ascll码值的范围,实际上char可以看做一个字节的整数或者无符号整数,只是他一般用来表示一个字符而已。宽字符集中为了表示像中国,日本等国家的文字,一个字符使用2个字节
nice_cxf 2013-03-04
  • 打赏
  • 举报
回复
char在gcc和vs里面大概都是-128-127,给char赋值-1,判断<0返回都是true
starytx 2013-03-04
  • 打赏
  • 举报
回复
引用 4 楼 starytx 的回复:
一个char占一个字节(8位),无符号的话那就是0~255,有符号就是-127~127,如果超出范围的话,一般会取一个对正常数目求模的值
更正一下,有符号的范围是-128~127
starytx 2013-03-04
  • 打赏
  • 举报
回复
一个char占一个字节(8位),无符号的话那就是0~255,有符号就是-127~127,如果超出范围的话,一般会取一个对正常数目求模的值
赵4老师 2013-03-04
  • 打赏
  • 举报
回复
引用 13 楼 leizh007 的回复:
楼上上还开小号轮流刷。。。
有人企图栽赃陷害,看来源IP地址。
mymtom 2013-03-03
  • 打赏
  • 举报
回复
引用 1 楼 Athenacle_ 的回复:
C/C++ code?1234565.2.4.2.1If the value of an object of type char is treated as a signed integer when used in anexpression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and……
++ 在limits.h里。
dingqiang107 2013-03-03
  • 打赏
  • 举报
回复
“但char在标准中是unsigned”这句话的意思是char的标准取值范围只有0-127,因此从取值范围来讲,属于无符号整数。并不是说char在标准中和unsigned char是同一类型。 比如说我规定某一自定义的数据类型取值范围是33-178。从取值范围来讲,这是无符号整数,但是可以用unsigned char, short, unsigned short, int, unsigned int, long, unsigned long中的任何一种类型来表示。任何超出这个范围的值可能存在,但对于我规定的这个数据类型都是非法的。就好像enum一样,可以设成任意值,但不都是合法的。 char是一种单独的数据类型,由编译器决定其底层采用哪种表示方法。只有0-127是“标准”的,这个范围以外的值如何处理因编译器而异,不保证可移植。通常不要把char的值设到0-127之外,必要时用CHAR_MIN和CHAR_MAX确定char的范围,不能当做是signed char或unsigned char。
加载更多回复(1)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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