看一个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文章
7614浏览量
137647 -
ARM架构
+关注
关注
15文章
177浏览量
36416 -
char
+关注
关注
0文章
11浏览量
3732 -
gcc编译器
+关注
关注
0文章
78浏览量
3420
原文标题:char属于有符号还是无符号
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
关于verilog中的无符号数和有符号数
在数字电路中,出于应用的需要,我们可以使用无符号数,即包括0及整数的集合;也可以使用有符号数,即包括0和正负数的集合。在更加复杂的系统中,也许这两种
跟着狄泰唐老师学C语言进阶教程的笔记之有符号与无符号
——> MIN_VALUEB. MIN_VALUE-1 ——> MAX_VALUE4. signed和unsignedl C语言中变量默认为有符号的类型l unsigned 关键字声明为无
发表于 05-16 21:43
无符号类型与整数文字不匹配
什么吗? case和if / elsif之间有区别吗?signal rx_count:unsigned(15 downto 0);case rx_count是当15 =>- 这就产生了“无符号
发表于 03-05 12:53
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
plc位、字节、字、双字、有符号、无符号数据类型的关系
plc位、字节、字、双字、有符号、无符号的关系以下内容由深圳市综科智控科技开发有限公司编辑整理 2021/08/18前言:很多同学在PLC开发过程中,因为数据
发表于 12-29 18:52
•2次下载
汇编基础知识教程之数据类型与寄存器
数据类型
这是 ARM 汇编基础知识系列教程的第二部分,涉及数据类型和寄存器。
与高级语言类似,ARM支持对不同数据类型的操作。我们可以加载(或存储)的数据类型可以是
评论