C02(有符号与无符号)

news/2024/11/30 5:39:34/

文章目录

  • 1 计算机中的符号位
  • 2. 有符号数的表示法
  • 3.无符号数的表示法
  • 4. signed 和 unsigned
  • 5. 当有符号数与无符号数进行运算
  • 6. 错误的使用了unsigned
  • 6. 总结

1 计算机中的符号位

C语言中,数据类型的最高位,用于标识数据的符号。

  • 最高位为1,表明这个数为负数
  • 最高位为0,表明这个数为正数
#include <stdio.h>int main()
{char c = -5;short s = 6;int i = -7;printf("%d\n", ( (c & 0x80) != 0 ));  //打印 1printf("%d\n", ( (s & 0x8000) != 0 )); //打印 0printf("%d\n", ( (i & 0x80000000) != 0 )); //打印 1return 0;
}

2. 有符号数的表示法

  • 在计算机内部用补码表示负数:正数的补码为正数本身,负数的补码为负数的绝对值各位取反后加1

在这里插入图片描述

3.无符号数的表示法

  • 在计算机内部,用源码表示无符号数:无符号数默认为正数,无符号数没有符号位

  • 对于固定长度的无符号数有:MAX_VALUE +1 --> MIN_VALUE,MIN_VALUE - 1 --> MAX_VALUE

4. signed 和 unsigned

  • 在C语言中,变量默认为有符号的类型
  • unsigned 关键字声明变量为无符号类型

5. 当有符号数与无符号数进行运算

当同类型有符号与无符号整数进行运算时,有符号整数会被转换为无符号整数 (如果整数类型不一致还需要考虑类型转换问题,目前只考虑整数类型一致)

#include <stdio.h>int main()
{unsigned int i = 5;int j = -10;if( (i + j) > 0 ){printf("i + j > 0\n");  //结果大于0,此行打印语句被执行}else{printf("i + j <= 0\n");}return 0;
}

6. 错误的使用了unsigned

#include <stdio.h>int main()
{unsigned int i = 0;for(i=9; i>=0; i--){printf("i = %u\n", i);}return 0;
}

因为变量i是无符号数,所以i肯定大于等于0,上述的for循环会一直循环下去

6. 总结

  • 有符号数用补码表示:正数的符号位为0,负数的符号位为1

  • 无符号数用源码表示:无符号数没有符号位,无符号数只能用于表示正数以及0

  • unsigned 只能用于修饰正数类型的变量

  • 有符号数与无符号数进行混合运算时,会将有符号数转换成无符号数后再进行计算,计算结果就变成了无符号数了
    无符号数没有符号位,无符号数只能用于表示正数以及0

  • unsigned 只能用于修饰正数类型的变量

  • 有符号数与无符号数进行混合运算时,会将有符号数转换成无符号数后再进行计算,计算结果就变成了无符号数了


http://www.ppmy.cn/news/753013.html

相关文章

C02_C语言基础

1.关键字、标示符、注释 1&#xff09;关键字都是小写的 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while …

Python3 爬虫学习笔记 C02 【基本库 requests 的使用】

Python3 爬虫学习笔记第二章 —— 【基本库 requests 的使用】 文章目录 【2.1】 requests 简介【2.2】 requests 基本用法 【2.3】 requests 构建 GET 请求 【2.3.1】 基本用法【2.3.2】 二进制数据抓取 【2.3.3】 添加 headers 【2.4】 requests 构建 POST 请求 【2.5】 requ…

C语言基础C02数组

1.编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然后将这两个数组合并成一个升序数组 int c[5] ={0}, d[5] = {0}, e[10] = {0}; printf("请输入一个包含5个元素的数组:"); for (int i =0; i < 5; i++) { sc…

7.3基础概念/文件、文件路径/batch_size,length,total/acc、loss计算/ect

一、 一些基础术语&#xff1a; util是utility的缩写&#xff0c;意思为实用工具。一般用于描述和业务逻辑没有关系的数据处理分析工具。 logger &#xff1a;日志 meter : 记录表 使用下划线 _ 表示不需要的变量是一种常见的开发者的约定&#xff0c;&#xff08;Python 解释…

8-js高级-3

JavaScript 进阶 - 3 了解构造函数原型对象的语法特征&#xff0c;掌握 JavaScript 中面向对象编程的实现方式&#xff0c;基于面向对象编程思想实现 DOM 操作的封装。 编程思想构造函数原型综合案例 编程思想 学习 JavaScript 中基于原型的面向对象编程序的语法实现&#xff…

新博文将发布在opoo.org

之前没想过在正儿八经的写博客&#xff0c;最近又突然来了兴趣&#xff0c;有时间想将自己的心得体会尽量写下来&#xff0c;新博将发布在 opoo.org 。

Opera下载最新版本地址

目前Opera官网可以打开&#xff0c;但是点下载时就会出错&#xff0c;国内无法访问Opera的下载地址&#xff0c;无法通过官网直接下载Opera浏览器。下面提供下载的方式。 一、通过官方的ftp站点下载 FTP地址为 1 http: //ftp .opera.com /pub/opera/desktop/ 如图&#xff0c;选…

使用Django操作数据库的一些坑-ORM机制

分析这两个接口 def get_topology_by_project(request):if request.method "POST":project_id request.POST.get(project_id)print(project_id)topologies Topology.objects.filter(project_id_idproject_id)topology_list []for topology in topologies:topolo…