char、unsigned char区别
来源:互联网 发布:乔艾莉·波妮身世知乎 编辑:程序博客网 时间:2024/06/13 21:41
在c语言中,char有两种类型:signed char和unsigned char,从词义来看,分别表示有符号位和无符号位。
signed char因为有符号,表示范围是-128-127,但是ascii码的取值位0-127,即最高位必须为0;
unsigned char没有符号位,因此能表示0~255。
当最高位为1时,作为字符输出时显示为’?’。
在表示byte(c语言中没有byte关键字)时,都用unsigned char,是为了避免由于signed char转化为其他数值类型时扩展带来的问题。通过如下例子可以说明:
#include <stdio.h>void f(unsigned char v){ char c = v; unsigned char uc = v; unsigned int a = c, b = uc; int i = c, j = uc; printf("%%c: %c, %c\n", c, uc);//符号位为1时,输出为?,表示非正常ascii值 //signed char作为十六进制int数据输出, //系统会对符号位进行扩展,将符号为之前的多余位置为1,其实符号位为0也会扩展, //只不过是多余的位被置0,没有效果而已 //16进制输出,显示结果为补码,负数补码ff ff ff c1的原码为-63 //ff ff ff c1 - 1 = ff ff ff c0 = 80 00 00 0011 1111 = -63 printf("%%x: %x, %x\n", c, uc); printf("%%d: %d, %d\n", c, uc);}int main(){ printf("%x\n", -10);//使用16进制输出值,显示为补码值 printf("%o\n",-10);//使用8进制输出值,显示也为补码值 printf("%d\n",-10);//使用10进制输出值,显示为原码值 printf("1100 0001, 符号位位1\n"); f(0xc1);//传入字符为'A',但符号位为1 printf("0100 0001,符号位为0\n"); f(0x41); //传入字符为'A',符号位为0 short sh = -10; printf("%d\n", sh); //signed short 类型时,不会有符号扩展的问题,或直接赋予真值 return 0;}输出结果如下:fffffff637777777766-101100 0001, 符号位位1%c: ?, ?%x: ffffffc1, c1%d: -63, 1930100 0001,符号位为0%c: A, A%x: 41, 41%d: 65, 65-10
阅读全文
0 0
- char、unsigned char区别
- unsigned char * 与 char *区别
- char与unsigned char 区别
- char 和unsigned char 区别
- char, signed char, unsigned char的区别
- char、signed char、unsigned char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别(转)
- char与unsigned char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char 与char的区别
- char 与 unsigned char的本质区别
- char 与 unsigned char的本质区别
- char 与 unsigned char的本质区别
- 运算优先级的坑a[i++] = a[j]
- 编写QT多窗口程序
- CodeForces
- csuoj1828Dictionary (康托展开)
- ros::init源码分析(未完待续。)
- char、unsigned char区别
- java学习初探6之UML
- 2017多校联合第十场/HDU 6180 Schedule (贪心)
- 斯坦福大学吴恩达教授《machine learning》课程学习笔记—— week 1
- 并查集基础
- 好玩的xcode模拟器快捷键
- 如何在子线程中直接new Handler
- 简单flash播放器代码
- 开源资源和项目汇总