看一个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
无符号类型与整数文字不匹配
什么吗? case和if / elsif之间有区别吗?signal rx_count:unsigned(15 downto 0);case rx_count是当15 =>- 这就产生了“无符号
发表于 03-05 12:53
1.2FreeRTOS中的数据类型
数。 如果 BaseType_t 被定义成了 char 型,要特别 注意将其设置为有符号数,因为部分函数的返回值是用负数来表示错误类型。UBaseType_t这个数据
发表于 07-22 23:27
C语言单片机编程为什么总是用无符号的数据类型来定义
注意:答案和题目均转自百度知道char型可以表示数的范围是-128到127,所占位数是8位int型可以表示数的范围是-32768到32767,所占位数是16位假如用有符号的数据类型表示
发表于 07-01 08:07
SpinalHDL的UInt与SInt数据类型能够进行有符号/无符号数操作
在Bits的基础上,SpinalHDL提供了UInt、SInt数据类型,从而能够进行有符号/无符号数操作。变量定义/初始化UInt/SInt
发表于 07-14 14:45
评论