unsigned char与char的区别

Character values of type unsigned char have a range from 0 to 0xFF hexadecimal. A signed char has range 0x80 to 0x7F. These ranges translate to 0 to 255 decimal, and –128 to +127 decimal, respectively. The /J compiler option changes the default from signed to unsigned.

char 是无符号的
unsigned char 是无符号的,里面全是正数

两者都作为字符用的话是没有区别的,但当整数用时有区别:
char 整数范围为-128到127,
而unsigned char 整数范围为0到255

多数情况下,char ,signed char 、unsigned char 类型的数据具有相同的特性然而当你把一个单字节的数赋给一个大整型数域时,便会看到它们在符号扩展上的差异。另一个区别表现在当把一个介于128和255之间的数赋给signed char 变量时编译器必须先进行数值转化,同样还会出现警告。若使用十六进制进行赋值使用unsigned char 要方便一些.根据编译器具体实现情况不同,char要么和signed char等同,要么和unsigned char等同.

unsigned char*跟char *是一样的。

功能:统计字符串里面的汉字的个数 (gb2312编码内码大于0xa0)

char szText[]= "12345你好";

l= strlen(szText);
int sum=0;
for (int i=0; i< l; i++)
if (szText[i] > 0xa0)
sum++;
sum/=2;

这样你根本统计出到任何汉字,
因为char是有符号的,打最大就是127,超过就变成复数了。比如7f 是127,那么80就是-1了。
这时候你一定要写成
unsigned char szText[]= "12345你好";  
`static unsigned char` 和 `unsigned char` 的区别可以从以下几个方面来理解: ### 1. 数据类型部分 (`unsigned char`) 无论是 `static unsigned char` 还是普通的 `unsigned char`,它们的数据类型都是相同的。`unsigned char` 表示一种无符号字符型数据类型,在大多数系统上占用一个字节 (8位) 并只能存储非负值。 - **范围**:0 到 255(即 \(2^8 - 1\)) - 它用于表示那些不需要考虑负数的情况,并且可以更有效地利用整个字节的存储空间 例如: ```c unsigned char a = 255; // 合法赋值 ``` --- ### 2. 存储类别部分 (`static`) 添加了关键字 `static` 就改变了变量的作用域、生命周期以及初始化规则等特性。下面是详细对比两者的差异点: #### (1)作用域的区别 - 普通的 `unsigned char`: 如果声明在一个函数内部,则它的作用域仅限于该块或函数内;如果是在全局范围内声明,则它在整个程序都可以访问到。 - 加入 `static` 关键字后的 `unsigned char`: 即使位于局部位置(如某个函数体内),其作用域仍然局限于当前源文件内或者是所在的那个特定函数中。换句话说,外部其他地方无法直接通过名字引用这个变量。 #### (2)生存期的不同 - 对于常规的自动存储分配类型的 `unsigned char`(比如作为函数内的局部变量时),当控制流离开定义它的区域之后就会销毁掉. - 而加上静态修饰符后(`static unsigned char`),即使处于函数里边,一旦创建完成就不会再被清除直到整个应用程序结束为止. 举个例子来看: ```c #include <stdio.h> void func() { unsigned char localVar = 0; printf("localVar=%d\n", ++localVar); static unsigned char staticLocalVar = 0; printf("staticLocalVar=%d\n", ++staticLocalVar); } int main(){ for(int i=0;i<3;i++)func(); } ``` 运行结果将显示每次调用`func()`都会对普通局部变量重置初值为零后再累加一次输出1; 而对于带了static标识的那个则会一直保留之前的数值并在下次基础上继续增加打印出连续递增的结果2->3依次类推... #### (3)默认初始值设定方式的变化 对于只简单地申明了一个`unsigned char`,除非特别指定否则不会给予明确的缺省起始状态; 但是若是运用到了`static`限定词的话那么即便用户没给出任何表达式来进行显式的设置,默认也会赋予相应基本整数系列的第一成员——也就是数字"0". 总结来说就是:`static unsigned char`相比单纯的`unsigned char`,拥有更大的存活时间长度同时限制了自己的可见性并且具备预设开启条件下的固定原始形态.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值