整型包括长整型(long),短整形(short),整型(int),字符型(char)。众所周知,char是字符类型。但其实char也是一个比较古怪的整型,长度为1字节 (默认是无符号类型)。

然后我们来解释一下有符号数无符号数,首先我们要明白有符号和无符号都是针对二进制数来讲的,并且他们都是以补码的方式在计算机中存储的。
有符号数:用最高位最符号位,‘0’代表正数,‘1’代表负数,其余位用作数字位代表数值位。
无符号数:所有位都为数值位,无正负之分,亦无符号位。

之后我们在来瞧一瞧补码^_^
正数:原码,反码,补码都相同
负数:反码为除符号位外按位取反,补码为反码+1。

好了接下来我们看一下关于无符号和有符号的一些题

1.

int main()
{char a = -1;signed char b = -1;unsigned char c = -1;printf("%d %d %d", a, b, c);//a=-1 b=-1 c=255system("pause");return 0;
}

这个题中的a和b应该比较好理解,但是c呢我们可以来算一下
1000 0001 -1的原码
1111 1110 -1的反码
1111 1111 -1的补码
当一个无符号1字节的整型%d输出时这就涉及到整型提升(即表达式中的字符和短整型操作数在使用之前被转换为普通整型(32bit))
那-1输出是个它前应加上它的符号位‘’(若在定义是为有符号数就要要加‘1’)
即输出 0000 0000 0000 0000 0000 0000 1111 1111
此时依据整型来说此数应是2^8-1=255

2.

char a = -128;
printf("%u\n", a);//1111 1111 1111 1111 1111 1111 1000 0000

我们依旧来分析一下

首先我们先要知道这个-128在内存中是怎么存储的
char类型1个字节8个比特位若表示无符号数字的话是0000 0000~1111 1111 即0~255
但如果表示有符号数的话最高比特位应是符号位即
负数:1000 0000~1111 1111 即-128~-1 (我们规定1000 0000是-128)
正数:0000 0000~0111 1111 即0~127
我们再来看上面的这个题
1000 0000 -128
1111 1111 1111 1111 1111 1111 1000 0000 整型提升之后
按无符号整型十进制输出即4294967168

3.

char a = 128;
printf("%u\n", a);

上面说道char能表示得有符号数字的范围是0~127和-128~-1
本题中显然仅靠char中的8个比特位已经不够表示128了我们可以借一位表示即
1 1000 0000 (此时最高位依旧表示符号位)
1111 1111 1111 1111 1111 1111 1000 0000(整型提升增加符号位后)
无符号整型是十进制输出依旧是4294967168

4.

int i = -20;
unsigned int j = 10;
printf("%d\n", i + j);//输出10

算一波!!!

1000 0000 0000 0000 0000 0000 0001 0100 -20的原码
1111 1111 1111 1111 1111 1111 1110 1011 -20的反码

1111 1111 1111 1111 1111 1111 1110 1100 -20的补码
0000 0000 0000 0000 0000 0000 0000 1010 10的补码 +
————————————————————————————
1111 1111 1111 1111 1111 1111 1111 0110 i+j的补码
1111 1111 1111 1111 1111 1111 1111 0101 i+j的反码
0000 0000 0000 0000 0000 0000 0000 1010 i+j的原码=10

5.

unsigned i;
for (i = 9; i >= 0; i--)
{printf("%u\n",i);
}

此时我们会发现程序陷入了一个停不下来的情况,那这又是为什么嘞
我们一定要清楚i是一个无符号数是不可能为负数的所以条件是一定成立的所以是一个死循环

6.

char a[1000];
int i;
for (i = 0; i < 1000; i++)
{a[i] = -1-i;
}
printf("%d", strlen(a));//255

再来看这个代码首先a是一个无符号的数组,无符号只能放入的数字范围是0~255所以在第一个数字-1(1111 1111)存入数组时数组会以为它是一个无符号数255存入,接下来-2(1111 1110)254,以此类推,在存入‘0’时strlen就找到了‘停止符’此时数组里存入了255~1,255个数字

7.

unsigned char i = 0;
for (i = 0; i <= 255; i++)
{printf("Hello World!\n");
}

这个代码依旧是一个死循环
首先我们知道i是一个无符号数,范围是0~255,所以for循环里的条件是永远成立的,所以它会一直循环下去

好了花了一下午的时间写的这个,还是那句话,若是有人看到发现什么问题,希望你们不吝赐教,咱们一起学习一起进步么是吧~~^_^

浅析无符号整型和有符号整型相关推荐

  1. size_t 和int 无符号整型和有符号整型

    size_t一般用来表示一种计数,比如有多少东西被拷贝等,例如sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小.他的意义大致是: 适于计量内存中可容纳的数据项 ...

  2. 无符号整型和有符号整型的区别,以及无符号整型的使用

    有符号整型: 无符号整型: 注意: 无符号数据表示数量,只有正值 unsigned无符号标识不会改变数据类型的字节大小 无符号型数据打印要将之前的%d,全部替换成%u,如果在vs中没有注意转换,将无符 ...

  3. 负数时的有符号整型和无符号整型的转换

    目录 一.补码 二.负数时的有符号整型和无符号整型的转换 三.关于无符号的笔试题 一.补码 有符号数在计算机中存储,用数的最高位存放符号, 正数为0, 负数为1 例如:有符号数 1000 0011,其 ...

  4. C语言中无符号整型变量赋值负数,负数时的有符号整型和无符号整型的转换

    目录 一.补码 二.负数时的有符号整型和无符号整型的转换 三.关于无符号的笔试题 一.补码 有符号数在计算机中存储,用数的最高位存放符号, 正数为0, 负数为1 例如:有符号数 1000 0011,其 ...

  5. C++有符号整型和无符号整型的区别

    C++有符号整型和无符号整型的区别 C++中的整型分为有符号类型整型和无符号类型整型,区别如下. 在有符号类型中:最左边的位是符号位,余下的位是数值位.符号位为1,代表负数:符号位为0,则为正数.例如 ...

  6. 有符号整型和无符号整型

    有符号整型和无符号整型的区别在于怎样解释整数的最高位 对于无符号整型,其最高位被c编译器解释为数据位 对于有符号整型最高位解释为符号位 如果符号位为0则表示为正数 为1则表示为负数 对于具有相同数据位 ...

  7. C语言 有符号整型和无符号整型的比较

    C语言 有符号整型和无符号整型比较时,有符号整型自动转换成无符号整型,所以 10<-100 注意题给整数的范围,判断比较的整数类型

  8. C语言有符号整型和无符号整型的比较

    int s = -1; unsigned int u = 1; if(s < u) 这样比较的结果是:s>u,即出现-1>1 因为:在有符号整型和无符号整型的比较中,自动将有符号整型 ...

  9. 整型和短整型,有符号和无符号

    整型变量分类 短整型:short int 整型:int 长整型:long int 无符号短整型:unsigned short 无符号整型:unsigned int 无符号长整型:unsigned lo ...

最新文章

  1. php date 毫秒_高性能的PHP日志系统 SeasLog 使用
  2. VUE第三篇 入门后续
  3. Navicat Premium 简体中文版 12.0.16 以上版本国外官网下载地址(非国内)
  4. C#中获取程序集版本号的方法
  5. 3dsmax软件和maya软件各自的优劣势是什么?
  6. kafka彻底删除topic清理数据
  7. sin、cos三角函数计算
  8. uboot distro_bootcmd 理解
  9. pytorch学习笔记7--循环神经网络、GAN
  10. windows端口配置
  11. app性能数据导出生成图表方法之一
  12. Cohort Analysis Using Python
  13. DeepLabv3:《Rethinking Atrous Convolution for Semantic Image Segmentataion》
  14. Android Studio 星座查询系统
  15. 【黄啊码】vue-pdf预览时无法显示印章和中文字体或者乱码(简单粗暴)
  16. 一个人瘦到什么程度身材才算好?其实身材好与体重关系不大
  17. 电子学会2023年3月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析
  18. 干货!史上最全数据分析学习路线来了!
  19. 支付宝商户订单被退款,如何追回?
  20. 【TOP期刊推荐】JCR1区网络计算类重点SCI期刊征稿中~

热门文章

  1. 区块链研究生专业_华东交通大学信息工程学院江西应用科技学院软件与区块链学院帮扶合作签约成功...
  2. linux 进程最小化,如何实现Linux系统最小化(4)
  3. Ubuntu 安装 基于XMPP的Profanity
  4. phpsocket.io使用
  5. CSDN设置插入代码的背景色为黑色 csdn更改背景色、主题
  6. 夏驰和徐策的大学英语四六级备考
  7. javascript nextSibling属性
  8. 五种内部排序算法性能比较——C++
  9. sybase ASE 如何卸载和删除服务
  10. 互联网赋能医疗产业流通,让企业告别低能效高成本运作模式