糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 2 有符号数与无符号数

2 有符号数与无符号数

时间:2024-06-18 06:18:18

相关推荐

2 有符号数与无符号数

前言

狄泰软件唐老师的个人学习笔记

1、有符号数

有符号数中数据类型的最高位是数据的符号位

最高位为1,表明这个数为负数最高位为0,表明这个数为正数

实验:检验数据的最高位是否是 符号位

#include <stdio.h>int main(){char i = 5;short a = 2;int b = -2 ;printf("%d\n", ((i&0x80) != 0 ) );//0, printf("%d\n", ((a&0x8000) != 0 ) ); //0printf("%d\n", ((b&0x80000000) != 0 ) );//1,//复数最高位是1,与过还是1return 0;}

计算机内部,最高位为符号位,其他位用补码表示有符号数

正数的补码是 正数本身负数的补码负数的绝对值各位取反+1

8位整数 5 的补码为: 0000 0101

8位整数 -7 的补码为:1111 1001 (7为 0000 0111 ,各位取反 1111 1000,再+1 )

16位整数 20 的补码为: 0000 0000 0001 0100

16位整数 -13 的补码为:1111 1111 1111 0011

2、无符号数

计算机中用 原码表示无符号数无符号数默认正数 (最小值为0,最大值看占用内存) 对于无符号数,最大值+1 = 最小值(0);最小值 (0)-1 = 最大值 由于无符号数没有符号位,所以无符号数的范围比有符号数大一倍

signed与unsigned

C语言中变量默认为有符号的类型

unsigned关键字声明变量为无符号类型,比如 unsigned char

其中,float没有无符号,不能用unsigned

实验:有符号数与无符号数运算

#include <stdio.h>int main(){unsigned int i = 5;int j = -10;if( (i+j) > 0 ){printf("i+j > 0");//这里输出,原因如下}else{printf("i+j < 0");}return 0;}

当有符号数与无符号数一起运算时,有符号数会被看作无符号数

-10 为的二进制 1111 1111 1111 1111 1111 1111 1111 0110,把这个看作无符号,这是很大的正数,所以i+j > 0

实验:

#include <stdio.h>int main(){unsigned int i = 0;for( i=9; i>=0; i--){printf("i=%u", i);//%u是无符号十进制整数}return 0;}

因为是无符号整数,i 为0后再减是最大值,不会是期望中的负数,所以for循环一直执行

如果觉得《2 有符号数与无符号数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。