0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

char是有符号类型还是无符号类型?

学益得智能硬件 来源:学益得智能硬件 2024-03-17 10:15 次阅读

看一个C语言的笔试题,题目很简单,问char是有符号类型还是无符号类型?

看到这个题目的时候,我毫不犹豫的选择了一个错误答案。

在大部分人的认知中,C语言数据类型前面的signed是可以省略的,比如:

int a;
其实等价于:
signed int a;
也就是 a 表示有符号整型。 如果想要定义无符号整型,可以写成:
unsigned int a;
前面的 unsigned 不能省略。

但是 char 类型却除外。

写个代码测试一下,有符号 char 表示范围 -128 - 127,无符号 char 表示范围 0 - 255。

我们只要定义一个 char 类型等于 127,让他加一后,看结果大于 0 还是小于 0 就行。

先用 Ubuntu 里面的 gcc 来编译,结果是有符号数。

换成 arm-linux-gcc,在ARM架构的开发板上运行,结果是无符号数。

最后再来看下C标准,他把这种行为称为:
implementation defined
就是让编译器自己去决定,所以不同的环境下面,char表示的确实不一样。

如果考虑到移植,一定要谨慎使用。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128720
  • ARM架构
    +关注

    关注

    14

    文章

    167

    浏览量

    35992
  • char
    +关注

    关注

    0

    文章

    11

    浏览量

    3505
  • gcc编译器
    +关注

    关注

    0

    文章

    77

    浏览量

    3233

原文标题:char属于有符号还是无符号

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    符号数,符号数,浮点数探讨

    本帖最后由 hq1987 于 2015-4-29 11:52 编辑 对于符号数大家都基本理解,我主要说说符号数,浮点数在机器世界里到底是怎么表示的。1、
    发表于 04-29 10:15

    跟着狄泰唐老师学C语言进阶教程的笔记之有符号符号

    ——> MIN_VALUEB. MIN_VALUE-1 ——> MAX_VALUE4. signed和unsignedl C语言中变量默认为符号类型l unsigned 关键字声明为
    发表于 05-16 21:43

    DSP指令——符号32位饱和为符号8位

    hi,everyone: 我做优化时候,需要将一个符号的32位  int 类型的数,做一个饱和操作,变成一个 符号的8位的数。具体代码如
    发表于 06-21 02:36

    带有无符号字符的隐式类型转换

    大家好,我正在写一个需要使用符号字符的程序。但是,每当我使用一个算术运算符或位运算符时,总是会得到“隐式签名到符号转换”警告。结果是,在没有警告的情况下生成以下内容:例如:
    发表于 10-25 16:53

    隐式签名到符号警告

    您好,我很少关注隐式签名到符号转换警告。为什么所有的变量都被声明为符号,我仍然得到这个警告?上面例子中的值是否被视为
    发表于 11-06 14:43

    符号类型与整数文字不匹配

    什么吗? case和if / elsif之间区别吗?signal rx_count:unsigned(15 downto 0);case rx_count是当15 =>- 这就产生了“符号
    发表于 03-05 12:53

    请问AFE5801 AD转换后数字信号是用符号还是符号数表示?

    请问AFE5801 AD转换后数字信号是用符号还是符号数表示的啊?
    发表于 05-24 08:04

    1.2FreeRTOS中的数据类型

    数。 如果 BaseType_t 被定义成了 char 型,要特别 注意将其设置为符号数,因为部分函数的返回值是用负数来表示错误类型。UBaseType_t这个数据
    发表于 07-22 23:27

    双状态符号/符号数据类型

    双状态符号数据类型双状态符号数据类型四状态数据类型
    发表于 01-18 06:03

    C语言单片机编程为什么总是用符号的数据类型来定义

    注意:答案和题目均转自百度知道char型可以表示数的范围是-128到127,所占位数是8位int型可以表示数的范围是-32768到32767,所占位数是16位假如用符号的数据类型表示
    发表于 07-01 08:07

    char字符型基本含义

    时,既不是符号,也不是符号char字符型基本含义: 字符数据类型(字节大小为1)eg: ‘
    发表于 11-05 08:14

    stm32符号8位转换为int类型的方法是什么

    stm32符号8位转换为int类型的方法是什么
    发表于 12-20 07:14

    SpinalHDL的UInt与SInt数据类型能够进行符号/符号数操作

    在Bits的基础上,SpinalHDL提供了UInt、SInt数据类型,从而能够进行符号/符号数操作。变量定义/初始化UInt/SInt
    发表于 07-14 14:45

    高效的C编程之变量类型

    。 表14.2 C编译器数据类型映射 C数据类型表示的意义 char符号8位字节数据 short有符号16位半字数据 int有
    发表于 10-17 16:50 3次下载
    高效的C编程之变量<b class='flag-5'>类型</b>

    关于有符号数据类型的示例

    我们学习一下Systemverilog中的有符号数据类型的赋值。
    的头像 发表于 10-17 14:40 736次阅读