首页 > 其他分享 >读书笔记-数据类型的转换

读书笔记-数据类型的转换

时间:2023-01-07 10:22:24浏览次数:43  
标签:10 转换 变量 符号 int 读书笔记 数据类型 unsigned 隐式

计算机不会区分数据的符号性,符号性的差异仅由计算机指令如何使用数据而定。比如在 C 语言中,当对某类型变量进行强制类型转换时,其底层存储的数据并不会发生实质的变化,而仅是程序对如何解读这部分数据的方式发生了改变。比如下面这个例子:

1 #include <stdio.h>
2 int main(void) {
3   signed char x = -10;
4   unsigned char y = (unsigned char)x;
5   printf("%d\n", y);  // output: 246.
6   return 0;
7 }

其中,有符号整型变量 x 会按照位模式 1111 0110 的补码形式存放有符号数 -10,而如果将该序列按照无符号整数的位模式进行解读,则可得到如程序运行输出一样的结果,即无符号整数值 246。 总之,程序在进行强制类型转换时,不会影响其底层数据的实际存储方式。

 

在 C 语言中,关于数据使用还有一个值得注意的问题:变量类型的隐式转换(Implicit Type Conversion)。C 语言作为一种相对而言的“弱类型”语言,其一大特征就是在某些特殊情况下,变量的实际类型会发生隐式转换。在下面这个例子中,定义的两个变量 x 与 y 分别为有符号整数和无符号整数,且变量 x 的值明显小于变量 y,但程序在实际运行时却会进入到 x >= y 的分支中,这就是因为发生了变量类型的隐式转换。

 1 #include <stdio.h>
 2 int main(void) {
 3   int x = -10;
 4   unsigned int y = 1;
 5   if (x < y) {
 6     printf("x is smaller than y.");
 7   } else {
 8     printf("x is bigger than y.");   // this branch is picked!
 9   }
10   return 0;
11 }

实际上,在上面的代码中,程序逻辑在真正进入到条件语句之前,变量 x 的类型会首先被隐式转换为 unsigned int ,即无符号整型。而根据数据类型的解释规则,原先存放有 -10 补码的位模式会被解释为一个十分庞大的正整数,而这个数则远远大于 1。

 

标签:10,转换,变量,符号,int,读书笔记,数据类型,unsigned,隐式
From: https://www.cnblogs.com/ben002/p/17032186.html

相关文章

  • 读书笔记-只读变量与字面量常量的区别
    在C语言中,使用const关键字修饰的变量定义语句,表示对于这些变量,我们无法在后续的程序中修改其对应或指针指向的值。因此,我们更倾向于称它们为“只读变量”,而非常量。只......
  • 视频转换为网易云音乐
    youtube视频下载youtube转mp3链接YeuTubetoMP4&MP3粘贴youtube视频链接点击继续选择MP3或者MP4B站视频下载B站视频下载链接:唧唧把b站地址粘贴到唧唧里面去......
  • uni-app HBuilderX 工程转换 vue-cli 工程
    1、使用vue-cli4新建空工程vuecreate-pdcloudio/uni-preset-vuemy-project地址不行就直接下载,使用本地地址2、将HBuilderX工程内的文件(除unpackage、node......
  • 三维模型转换成CAD三维模型
                  ......
  • PostgreSQL数据类型-boolean
    PostgreSQL支持SQL标准的​​boolean​​​数据类型。​​boolean​​只能有"true"(真)或"false"(假)两个状态之一,第三种"unknown"(未知)状态,用NULL表示。真值的有效......
  • 图片中文名称转换为拼音带音调,最终复制图片到新文件夹的方法
    usingMicrosoft.International.Converters.PinYinConverter;usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Collections.S......
  • 文件和byte数组之间相互转换
    文件转换成byte数组文件转换成byte数组有两种方式:1.传统方式Filefile=newFile("/temp/abc.txt");//initarraywithfilelengthbyte[]bytesArray=newbyte[......
  • 牛客进阶题目6:数据串并转换电路
    接收6个bit之后下一拍输出一个6bit宽的data,注意此时如果valid_a拉高,也要接收新进来的数据这里用移位寄存器计数不太行,不太好让data_b在新数据出来前保持不变,虽然功能一样,......
  • mybatis使用postgresql中的jsonb数据类型
    最近新开发的一个功能使用到postgresql中的jsonb数据类型。架构师可能考虑到这种数据格式更加便于存储json格式的数据,因此考虑使用这种数据类型。自己以前未曾使用过这......
  • Linux时间戳转换成易读格式的方法
    背景最近一直在学习Redis相关的知识.其中遇到了一个redismonitor的命令但是这里有一个问题是:原生命令查询出来的时间是Unix时间戳格式的.不太好发现查看与进行对照......