C语⾔中char和unsignedchar的区别
在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义⽆符号类型,必须显式地在变量类型前加unsigned。
char在我所⽤的linux中⼀般都是8位⼀个字节,表⽰范围为-128~127。
unsigned char的表⽰范围为0~255。
⽽ASCII的最⼤值是127。因此我们如果使⽤char去表⽰字符,那么char和unsigned char是没有区别的。
当然如果去表⽰超过127的数,那么就会差别的。
注意:
如果直接⽤于数据传输,本质上unsigned char 和 char是没有区别的。。。因此传输过去的数据是什么,接收到的数据就是什么。
但是如果数据要⽤于显⽰,那就有区别。⽐如0xFF,在unsigned char⽤printf打印出来是255,⽽char是-1。
但是看过别⼈的⼀个博客,⾥⾯有指出,把⼀个char类型的变量赋值给int、long等数据类型或进⾏类似的强制类型转换时时,系统会进⾏类型扩展,这时区别就⼤了。对于char类型的变量,系统会认为最⾼位为符号位,然后对最⾼位进⾏扩展,即符号扩展。若最⾼位为1,则扩展到int时⾼位都以1填充。对于unsigned char类型的变量,系统会直接进⾏⽆符号扩展,即0扩展。扩展的⾼位都以0填充。所以在进⾏类似的操作时,如果char和unsigned char最⾼位都是0,则结果是⼀样的,若char最⾼位为1,则结果会⼤相径庭。
c语言和c++区别 (注意:C语⾔中如果是有符号数,那么最⾼位为1时,表⽰负数)
简单的来说就是当char和unsigned char都要强制转换成int类型(虽然正常也不会直接把unsigned char转换成int),这个时候如果两个最⾼位都是0,就都没问题。但是如果最⾼位都为1,那么char转换成int是没问题。但是unsigned char转换就会把最⾼位的1当做符号位。
最简单的举例就是unsigned char:1000_0001,⼗进制就是129,那么转换成int类型后⼗进制就是-1。
应该没⼈会这么⼲,但是也要注意⼀下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论