无符号数和数据类型转换

news2024/11/27 12:43:56

无符号数

字符类型的无符号值:

所有的数据底层都是采用二进制来保存,而第一位用于保存符号位,当不考虑符号位时,所有的数都按照数值进行保存

#include <stdio.h>

int main() {
    unsigned char a = -65;
    printf("%u",a);
}
191
进程已结束,退出代码0

首选char占据1一字节,也就是八个bit位

换算过程如下:

-65= 【1100 0001】原=【1011 1111】补

由于没有符号位所以所以的数值都是正数也就是【1011 1111】补=128+32+16+8+4+2+1=191

我们可以看到给一个无符号的char类型的-65的值时输出的结果却是191,很明显符号位也是作为数值表示的一部分,所以结果不是-65

整数类型的无符号值:

有符号值的int类型的数据能表示的范围是:-2147483648~2147483647

我们也可以直接打印数字类型的无符号类型:

#include <stdio.h>

int main() {
    // unsigned char a = -65;
    unsigned int a = -1; // 因为-1的二级制补码都是一所有可以获取到int类型的无符号的最大值
    printf("%u",a);
}

4294967295
进程已结束,退出代码0

通过上面的源代码我们可以得到int类型的无符号的最大值为:4294967295

数据类型的转换

一种类型的数据可以转换为其他的类型的数据,这种操作叫做类型转换,类型转换可以分为自动类型转换和强制类型转换

自动类型转换

#include <stdio.h>
int main() {
    short a = 10;
    int i = a;
    // 自动类型转换,也就是编译器进行隐式的数据类型转换
    float c = 3; // 这个也是自动类型转换
}

但是如果使用一个比转化的类型最大值都还要大的值进行类型转换时,它只会保留自己所需要的几位:

#include <stdio.h>

int main() {
    int a = 511;
    char b = a; // char的最大值为127超出chard的最大值
    printf("%d",b);
}
-1
进程已结束,退出代码0

换算过程:

511 = int【00000000 00000000 00000001 11111111】

char 【1 11111111】 = 【11111111】只保留8位 = -1

整数和小数类型的转换

int main(){
    int b = 3;
    double i = b;
    printf("%f",i);
}
3.000000
进程已结束,退出代码0

小数转整数类型

#include <stdio.h>

int main(){
    double b = 3.88;
    int i = b;
    printf("%d",i);
}
3
进程已结束,退出代码0

当小数类型转换为整数类型的时候小数部分可能会丢失(只是丢失并不是四舍五入而是直接丢失)

除了赋值操作会制动转换以为运算中也会进行自动类型的转化

#include <stdio.h>

int main() {
    float a =2;
    int b = 3;
    double c = b/a;
    printf("%f",c);
}
1.500000  
进程已结束,退出代码0	

最后输出的数据类型为double类型,中间数据类型的转换过程:

a:float =>double / b:int =>double = c:double

这样转换的依据为:

请添加图片描述

不同的数据类型优先级不同

char和short类型在参与运算时一律转换为int再进行计算

浮点数类型默认为双精度进行计算

当一个更高优先级类型和一个低优先级的类型同时参与运算时,统一转换为高优先级进行运算。

强制类型转换

强制转换类型 值 = (强制转换类型) 变量、常量或表达式;
#include <stdio.h>

int main() {
// 强制类型转换
    double a = 3.84;
    // 对a进行强制转换
    int b = (int) a;
    // 先对a进行强制转换然后再进行运算
    int c = (int) a+3.8;
    // 先对小括号里面的进行运算然后对结果进行强制转换
    int d = (int) (a+3.8);
    printf("%d",b);
    printf("\n");
    printf("%d",c);
    printf("\n");
    printf("%d",d);
}
3
6
7
进程已结束,退出代码0

合理的使用强制类型转换可以帮助我们解决很多运算中的问题;例如:

自动类型转换:

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    double c = 10 / 3;
    printf("%f",c);
}

计算结果是错误的:

3.000000
进程已结束,退出代码0

使用强制类型转换:

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    double c =(double) 10 / 3;
    printf("%f",c);
}

计算结果为我们想要的结果

3.333333
进程已结束,退出代码0

的:

3.000000
进程已结束,退出代码0

使用强制类型转换:

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    double c =(double) 10 / 3;
    printf("%f",c);
}

计算结果为我们想要的结果

3.333333
进程已结束,退出代码0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM结构-堆

堆不是一种数据结构&#xff08;什么结构都可以存放在堆中&#xff09;堆内存的大小是可以调节的。类加载器读取了类文件后&#xff0c;需要把类、方法、常变量放到堆内存中&#xff0c;保存所有引用类型的真实信息JVM堆被同一个JVM实例中的所有Java线程共享JVM堆通常由某种自动…

Redis的过期策略以及内存淘汰机制

目录 一、过期策略1.1、定时删除1.1.1、过期1.1.2、过期的 key 集合1.1.3、定时扫描策略1.1.4、 Redis 中所有的 key 在同一时间过期了&#xff0c;会出现怎样的结果1.1.5、从库的过期策略 1.2、惰性删除1.3、定时删除和惰性删除的总结 二、缓存淘汰算法2.1、缓存淘汰算法概述2…

mysql 备份

mysql 备份 1. 备份的类型2.备份的类容3. 备份工具1&#xff1a;MySQL自带的备份工具2&#xff1a;文件系统备份工具3&#xff1a;其他工具 4:备份的策略1. 直接拷贝数据库文件2. mysqldump备份数据库3. mydumper备份数据库4.lvm快照从物理角度实现几乎热备的完全备份&#xff…

【Dart】006-类的定义和使用

【Dart】006-类的定义和使用 文章目录 【Dart】006-类的定义和使用一、类的定义1、概述2、简单定义与实例化代码示例运行结果 3、成员方法代码示例运行结果箭头函数写法 4、get 与 set 关键字概述代码示例运行结果 二、类的构造方法1、特点2、完整版的构造方法简化版完整版 3、…

关于K8s的Pod的详解(一)

关于K8s的Pod的详解&#xff08;一&#xff09; Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建&#xff0c;调度&#xff0c;管理的基本单位。由上级的Controller对Node上安装的Kubelet发…

最全整理,Pytest自动化测试框架-用例参数/忽略用例/失败重试(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例参数化 …

一零六四、世界杯数据可视化分析(阿里云天池赛)

目录 赛制官方链接 活动背景 活动时间&#xff1a;即日起-12月31日17点 数据说明 世界杯成绩信息表&#xff1a;WorldCupsSummary 世界杯比赛比分汇总表&#xff1a;WorldCupMatches.csv 世界杯球员信息表&#xff1a;WorldCupPlayers.csv 代码实现 赛制官方链接 世界杯…

LitePal数据库的可视化

依赖 implementation com.amitshekhar.android:debug-db:1.0.0 输入adb forward tcp:8080 tcp:8080 run项目然后浏览器输入 localhost:8080 (保证手机和电脑出于相同wifi下) 效果 点击表格中的数据还可以进行数据的编辑和删除操作

x86架构ubuntu22下运行NDS模拟器DeSmuME

0. 环境 i7 ubuntu22 1. 获取源码 浏览器打开https://github.com/TASEmulators/desmume/releases&#xff0c;下载源码压缩包。 解压 tar -zvxf desmume-release_0_9_13.tar.gz cd desmume-release_0_9_13 2. 源码编译 2.1 build GTK2 or SDL2 frontend with autotools 配置…

【缺陷报告】缺陷报告怎样写会好一些?

目录 标题 描述或总结 影响 前置条件 重现步骤 结果 优先级 重现频率   附件 变通方案&#xff08;Workaround&#xff09; 发生原因分析&#xff08;Root Cause Analysis&#xff09; 环境配置 &#x1f381;更多干货 标题 1. 首先要做一个“标题党”&#xff…

NB!漏洞精准检测与深度利用框架

关注【Hack分享吧】公众号&#xff0c;回复关键字【230526】获取下载链接 工具介绍 这是一款高危漏洞精准检测与深度利用框架&#xff0c;采用框架与插件分离的模式&#xff0c;只做一件事情&#xff1a;精准狙击高危漏洞&#xff0c;适合专业打点人士。 目标探测 精密检测 深…

浏览器中Cookie的全面介绍

简介 在Web前端开发时&#xff0c;我们经常会遇到一些浏览器存储相关的工具&#xff0c;例如Cookie。Cookie的英文本意是曲奇&#xff0c;但是在Web中&#xff0c;它被用作浏览器中存储的数据。Cookie都是namevalue的结构&#xff0c;name和value都为字符串。 使用流程 在首…

2023.7.16-求平方

功能&#xff1a;输入一个整数&#xff0c;显示出不大于这个整数的所有整数的平方。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a0, b;printf("请输入一个整数&#xff1a;");scanf("%d",&a);pr…

Go语言之重要数组类型数组

我们之前学习过变量&#xff0c;当存储一个学生名字时可以name“jack”,但是如果班级有三十人&#xff0c;每个人的名字都想存储到内存中怎么办呢&#xff1f;总不能用三十个变量分别存储吧&#xff0c;这时数组就可以发挥作用了。 数组其实是和字符串一样的序列类型&#xff0…

深入了解加快网站加载时间的 JavaScript 优化技术

目录 01、最小化文件大小 01&#xff09;、JavaScript 代码示例&#xff1a;缩小前后 02、文件压缩 01&#xff09;、Gzip 和 Brotli 压缩方法 02&#xff09;、压缩的服务器端配置 03、捆绑以减少网络请求 01&#xff09;、捆绑说明 02&#xff09;、捆绑工具 03&…

OWASP常见Web安全漏洞

OWASP&常见Web安全漏洞 一、OWASP介绍二、OWASPTOP10与常见漏洞讲解2.1、OWASP Top10 2013 VS 20172.2、OWASP Top10 20212.3、A1&#xff1a;2017 注入2.3.1、SQL注入攻击2.3.2、命令注入攻击 2.4、A2&#xff1a;2017失效的身份认证&#xff08;业务逻辑漏洞&#xff09;…

Linux——动静态库的制作和使用超详细(实操+代码+原理介绍)

动静态库的制作和使用 1️⃣.动静态库介绍&#x1f3c0;静态库⚽️动态库&#x1f3c8;区别&#x1f3d0;使用动态库的优点包括&#xff1a;&#x1f3c9; 使用静态库的优点包括&#xff1a; 2️⃣静态库的制作&#x1f34a;Q:库文件能不能有main()函数&#xff1f;&#x1f34…

clickhouse基础数据类型 语法及使用可视化数据库工具 DBeaver

新建一个名为 test 的数据库&#xff1a;右击数据库点击新增&#xff0c;然后创建一张 test &#xff0c;utf8mb4 字符的&#xff0c;点击确定 在 test 数据库下新建一张数据表&#xff0c;如下所示&#xff1a;右击表&#xff0c;然后点击新建表 鼠标放列上面&#xff0c;右键…

b站视频播放三倍速

目录 一、操作 一、操作 document.querySelector(video).playbackRate 31、F12或者在当前界面鼠标右击选择检查 打开开发者工具平台 2、在console界面执行document.querySelector(video).playbackRate 3 document.querySelector(video).playbackRate 3

vector模拟实现

目录 vector相关接口实现 使用memcpy拷贝问题 迭代器失效 引起失效的操作 指定位置元素的删除操作 ​编辑引起底层空间改变的操作 vector相关接口实现 template<typename T> class vector { public:typedef T* iterator;typedef const T* const_iterator; public:…