数据在内存中的储存·大小端(文字+画图详解)(c语言·超详细入门必看)
前言:Hello,大家好,我是心跳sy😘,本节我们介绍c语言的两种基本的内置数据类型:数值类型和字符类型在内存中的储存方法,并对大小端进行详细介绍(附两种大小端判断方法),文章每个例题和知识点都会有详细的解释,友友们放心食用,我们一起来看看吧~!!
1、⭐️数据类型介绍⭐️
1.1、💫整型家族
👉我们之前已经了解过 int、short、long、longlong、float、double、char这几种基本的c语言内置数据类型。其中 int、short、long、char类型是整型家族,其中char虽为字符型类型,但是它的ASCII码在内存中保存为整型,所以也可以归为整型家族(这里我们为了方便介绍整型和浮点型在内存中的储存规则),也把它纳入整型之中。
👉整型家族里面的每个数据类型也都拥有有符号(signed)和无符号(unsigned)两种类型情况,其中char类型的有无符号与编译器有关。数据在内存的储存与有无符号息息相关。
1.2、💫浮点型家族
👉浮点型家族包括 float和 double类型,有趣的是这两个浮点型数据类型都没有无符号的情况,这是为什么呢❓我们知道,整型是采用二进制储存在内存中的,而浮点数却是按照整数部分、小数部分、指数部分存放的,运算也是分开来运算的,所以unsigned无法作用于float与double这种浮点型。
1.3、💫构造类型
👉由表中我们可以看到,构造类型由数组类型、结构体类型、共用体类型(联合类型) 以及枚举类型组成,构造类型一般可以给予用户非常大的自定义范围,可以同时对一个对象定义不同的变量,比如可以做到同时定义一个人的性别、年龄等等。(对四个构造类型的详细介绍我们后面都会单独写一篇文章,会统一收录到c语言专栏中)
1.4、💫指针类型
👉指针类型包括整型指针、浮点型指针、字符指针、数组指针、函数指针、空指针(void*)等等。 指针类型的作用是存放变量的地址,可以通过指针来改动变量。 指针作为一个变量是有大小的,其大小在32位平台是4个字节,64位平台上是8个字节,大小与指针的类型无关。(我们以后会对指针一章详细介绍)
1.5、💫空类型
👉空类型是指没有定义类型的数据类型,也称为void类型,在C语言中,空类型可以省略函数的参数列表,也可以修饰函数表示无返回值,通常用作函数指针,表示指向没有返回值的函数的指针。 空类型和其他类型之间的转换通常需要通过类型转换操作符进行。
记住以下3个规则:
⭕️如果函数无参数,应声明其参数为void类型。如:
int function(void)
{return 1;
}
👉若此时在调用function(2),在c语言编译器中不会报错,但是在c++编译器中将会不合法报错,所以无论在哪种编译器中,一定养成良好习惯,若函数不接受任何参数,一定要指明参数为void。
⭕️如果函数没有返回值,那么一定要声明为void类型。
⭕️如果函数的参数可以是任意类型的指针,那么应该声明其参数为void*,比如内存操作函数memset的函数原型为:
void*memset(void*buffer,int c,size_t num);
2、⭐️插叙:原码、反码、补码的介绍⭐️
👉我们知道,计算机底层只认识0和1,所以所有整型和浮点型数据到了底层都会通过转换成二进制形式(0和1的形式)来储存。计算机整数的表示方式有3种,即原码、反码、补码。3种表示方式均有符号位和数值位两部分,而所有整型数据在内存中都会以补码的形式储存。我们要了解整型的内存结构就需要先知道原码、反码、补码的知识。
⚠️先来看看3个码的基本概念:
⭕️原码是指一个数的二进制表示,第一位是符号位,正数为0,负数为1;
比如32位下-5的二进制,其原码为:1000 0000 0000 0000 0000 0000 0000 0101
⭕️反码是指将原码中除符号位以外每一位取反后得到的二进制数;
其反码为:1111 1111 1111 1111 1111 1111 1111 1010
⭕️补码是指将反码加1后得到的二进制数。
其补码为:1111 1111 1111 1111 1111 1111 1111 1011
👉在整型中我们可以分成两大类记忆理解:
正整数:原码、反码、补码相同。
比如:5的原码、反码、补码都为:
0000 0000 0000 0000 0000 0000 0000 0101
负整数:原码、反码、补码需进行计算得到,计算方式见概念。
🌈计算方式总结(针对负整数):
⭕️从原码——>补码:原码符号位不变,其他位按位取反,再加1;
⭕️从补码——>原码:补码符号位不变,其他位按位取反,再加1;(也可以先减1,再符号位不变,其他位按位取反)
3、⭐️整型数据在内存中的存储⭐️
👉我们前面提到,整型数据都是以补码的形式储存在内存中的。其原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理,(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路,比如原码到补码需取反加一,补码到原码也只需取反加一即可。
⭕️我们来看一个简单的整型数据内存例子:
int main()
{int i = 5;int j = -10;return 0;
}
可以看到i,j变量在x86环境下的内存显示如下:
👉从此例子中可以证明整型数据在内存中都是以补码的形式储存的,正整数5的原、反、补相同,负整数20以补码的十六进制形式储存。
❓但是我们又会发现一个问题,它们储存的顺序有些奇怪,我们知道,变量 i被分配4字节的内存,其中5只占一个字节,其他3个字节都为0, 而数据5被放置在第一个字节的位置,这放置的顺序是按照什么规则来的吗❓这里就要介绍大小端的知识点了~
3.1、💫大小端介绍(附两种证明方法)
❓为什么会有大小端之分呢
👉这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short 型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端储存模式。
👉先看概念:
大端模式:指数据的高字节存储在内存的低地址处,而数据的低字节储存在内存的高地址中;
小端模式:指数据的高字节存储在内存的高地址处,而数据的低字节存储在内存的低地址中。
⭕️如果现在还不是很明白,没关系,我们再来针对实例解释:
👉我们就看看5的存储模式:
5的补码为(记住正整数原反补相同):0000 0000 0000 0000 0000 0000 0000 0101
化为16进制表示为:0x00 00 00 05(其中05是低字节,往前依次为高字节)
🌈(一)、大端模式情况:可以看到低字节05存储在高地址处,即为大端模式。
🌈(二)、小端模式情况:可以看到低字节存储在低地址处,即为小端模式。
❓那么怎么才能知道自己的编译器用的是哪种模式呢,我们这里介绍两种方法:
🌈方法一:通过union关键字来实现
👉我们先介绍一下union关键字的用法:union的用法与struct非常相似,只不过union维护足够空间来放置多个数据成员中的一种,而不是为每个数据成员都分配空间。在union中所有的数据成员共用一个空间,同一时间内只能储存其中一个数据成员,所有的数据成员都具有相同的起始地址。
👉一个union只配置一个足够大的空间来容纳最大长度的数据成员,union关键字在c++中主要用来压缩空间,如果一些数据不可能在同一时间被用到,则可以使用。
⭕️我们可以利用union类型“所有数据成员的起始地址一致”为特点来证明大小端:
int Check_ram()
{union check{int i;char ch;}c;c.i = 1;return (c.ch == 1);
}
int main()
{if (Check_ram() == 0){printf("是大端模式\n");}elseprintf("是小端模式\n");return 0;
}
代码分析:
👉我们设置一个函数来判断大小端,函数中定义两个数据成员变量,一个是int类型变量i,一个是char类型变量ch,我们给i赋值为1,这时内存分配一个可以容纳最大长度数据成员的内存(此时分配4字节,最大数据类型是int),函数返回char类型变量是否为一的值,若为1,则返回1,若不为1,则返回0。主函数中接收返回值,如果返回值为0则是大端模式(因为成员起始地址一样,int型为4字节,char类型变量只有一字节,所以利用1所在的1字节位置在哪来判断大小端),若返回值等于1则是小端模式。
👉可以看到输出结果为小端模式,证明函数返回值为1,因为i变量的1肯定为低字节(见上文分析),并且int类型的内存分配是由低地址到高地址的,union中数据成员起始地址又一样,所以如果ch中的值也为1,那么一定是小端模式。
🌈方法二:普通方法强制类型转换实现
int Check_ram()
{int i = 1;return (*(char*)&i);
}
int main()
{if (Check_ram()== 1){printf("是小端模式\n");}else{printf("是大端模式\n");}return 0;
}
👉输出结果与上面一样,都为小端模式,我们同样设计函数实现,只需定义一个int型变量,只不过函数的返回值是将i的地址强制类型转换为char*后解引用的值,返回的类型就改为char了,与上面方法是同种道理,不明白的友友可以参照上述解释。
3.2、💫signed与unsigned关键字对整型取值的影响
👉我们知道,计算机底层只认识0和1,任何数据到了底层都必须转换为0和1,那么负数怎么储存呢?我们前面了解了计算机整数的3种表示方法原码、反码、补码,均有符号位和数值位两部分组成,数据类型的最高位是用来存符号的,约定若这个数为整数,则最高位为0,否则为1,其值为除最高位以外剩余位的值。
👉这样的话,一个32位的 signed int类型整数,其值表示的范围为:-2^31~ (2^31-1);8位的 char类型数,其值表示的范围为:-2^7~(2^7-1)。一个 32 位的 unsigned int类型整数,其值表示的范围为:0~(2^32-1);8位的 unsigned char 类型数,其值表示的范围为:0~(2^8-1)。需要说明的是,signed 关键字也很宽宏大量,你也可以完全当它不存在,缺省情况下(默认条件下),编译器默认数据为signed类型 (char类型数据除外)。
🌈看了上面的概念,相信你已经有了自己的理解,我们通过下面一道看似简单的题目康康你真的懂了吗😜
int main()
{signed char a[1000];int i;for (i = 0; i < 1000; i++){a[i] = -1 - i;}printf("%d", strlen(a));return 0;
}
输出结果如下:
这个结果和你想的是否一样呢?如果不一样没关系,我们一起来看看分析过程:
👉由上面的分析过程,我们知道a[0]-a[254]里面对应的值都不是0,而到a[255]时值为0,strlen函数时用来计算字符串长度的,遇到‘\0’,则认为字符串结束读取,所以到现在我们就能明白了为什么计算字符串长度是255了吧,这个问题的关键就是要明白signed char的取值范围为[-128~127],而超出这个范围就会产生溢出必须截断,之后就会产生循环。
🌈重点:我们总结一个有符号char的范围规律,可以画图看到其范围可以形成一个圆,从0开始不断+1,直到新的循环。
⭕️看了一个signed char类型的例题,我们再来看一个unsigned char类型的例题,猜一下结果会是多少呢?
unsigned char i = 0;
int main()
{for (i = 0; i <= 255; i++){printf("hello world\n");}return 0;
}
🌈重点:输出结果是死循环输出hello world,我们用一张图来解释:
👉我们看到,unsigned char类型范围为[0~255],他因为是无符号的,所以8位中的最高位符号位变为数值位,参与数的大小计算,从画图可以得到,当到255时为11111111,当到256时,发生内存溢出,最高位被截去,又会变成0,循环又一次开始,所以上述例子中,当i=256时,i变成0,继续循环,死循环hello world。
4、⭐️浮点型数据在内存中的储存⭐️
👉整数类型并不适用于所有应用,有些时候需要变量能存储带小数点的数,或者能存储极大数或极小数。而这类数可以用浮点格式(小数点是浮动的)进行储存,C语言提供了3种浮点格式。
浮点数家族包括:float(单精度浮点数)、double(双精度浮点数)、long double(扩展精度浮点数)类型
常见的浮点数:3.14159 1E10(1*10^10)
👉我们来看看浮点数在内存中的存储方法(大多数现代计算机遵循IEEE 754标准(即IEC 60559)规范)
👉IEEE 754标准提供了两种主要的浮点数格式:单精度(32位)和双精度(64位)。数值以科学计数法的形式存储,每一个数都由3部分组成:符号、指数和小数。指数部分的位数说明了数值的可能大小程度,而小数部分的位数说明了精度。
👉单精度格式中,指数长度为8位(E 指数位),而小数部分占了23位(有效数字M),因此单精度数可以表示的最大值约是3.40*10^38,其中精度是6个十进制数字。
🌈见下图:
👉双精度格式中,指数长度为11位(E指数位),而小数部分占了52位(有效数字M)
🌈见下图:
🌈任意一个二进制浮点数 V 可以表示为下面形式:
比如:十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。
👉那么,按照上面V的格式,可以得出S=0,M=1.01,E=2。
十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。
👉那么,S=1,M=1.01,E=2。
🌸⚠️对于M(有效数字)和E(指数位),IEEE有一些特别规定:
🔴对于M:
前面提到, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中xxxxxx表示小数部分。
IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的 xxxxxx部分。
比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字 。
🔴对于E:(情况比较复杂)
·首先,E为一个无符号整数。
由此,浮点数存储规则结束。
感谢大家花费宝贵的时间阅读本文章,制作不易,希望大家多多支持呀😘😘😘,如有任何问题欢迎各位大佬在评论区批评指正!!!
相关文章:
数据在内存中的储存·大小端(文字+画图详解)(c语言·超详细入门必看)
前言:Hello,大家好,我是心跳sy😘,本节我们介绍c语言的两种基本的内置数据类型:数值类型和字符类型在内存中的储存方法,并对大小端进行详细介绍(附两种大小端判断方法)&am…...
Word怎么转换成PDF文档?多个Word转换成PDF步骤分享
word文档是一种非常好用的文件格式,可以帮助用户们很好的保存图片和文字内容,不过并不是只有word这一种文档类文件格式,还有一种pdf文档也深受用户们的欢迎,在工作或者学习过程中这两种文档是可以互相转换格式的,那么W…...
【C++习题集】-- 堆
(用于复习) 目录 树概念及结构 名词概念 二叉树概念及结构 特殊的二叉树 满二叉树 完全二叉树 运算性质 二叉树存储结构 顺序存储 链式存储 堆 - 顺序存储 堆的性质 堆的实现 堆的应用 堆排序 直接建堆法 树概念及结构 概念:…...
vue + vue-office 实现多种文件(docx、excel、pdf)的预览
支持多种文件( docx、excel、pdf)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。 github: 《仓库地址》 演 示: 《演示效果》 功能特色 一站式:提供docx、pdf、excel多种文档的在线预览方案,有它就够了简单:…...
30.Netty源码服务端启动主要流程
highlight: arduino-light 服务端启动主要流程 •创建 selector •创建 server socket channel •初始化 server socket channel •给 server socket channel 从 boss group 中选择一个 NioEventLoop •将 server socket channel 注册到选择的 NioEventLoop 的 selector •…...
ssh端口转发
在本地客户端操作: ssh远程连接一段时间会失效的问题 vim /etc/ssh_config或vim /etc/ssh/ssh_config 在末尾添加ServerAliveInterval 30,意思是30s会发送一次向服务器连接的请求,以保持会话始终在线 验证: 放一段时间不操作,…...
独立站SEO是什么意思?自主网站SEO的含义?
什么是独立站SEO优化?自建站搜索引擎优化是指什么? 独立站SEO,作为网络营销的重要一环,正在逐渐引起人们的关注。在当今数字化时代,独立站已经成为许多企业、个人宣传推广的首选平台之一。那么,究竟什么是…...
Android JNI系列详解之NDK和JNI介绍
一、前提 针对自己在Android JNI和NDK这块技术的空白知识点,进行这个JNI系列的学习,记录这一阶段的学习。学习的主要步骤:从概念原理解析--->边学边实战--->从易到难,循序渐进。(学习这一阶段的前提:需要有Android开发基础) 学完JNI-NDK开发系列,达到的目的有:…...
LeetCode //C - 20. Valid Parentheses
20. Valid Parentheses Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets.Open bracke…...
浅析Java设计模式之四策略模式
title: 浅析Java设计模式之四策略模式 date: 2018-12-29 17:26:17 categories: 设计模式 description: 浅析Java设计模式之四策略模式 1. 目录 1. 目录2. 概念 2.1. 应用场景2.2. 优缺点 2.2.1. 优点2.2.2. 缺点 3. 模式结构4. 样例 4.1. 定义策略4.2. 定义具体策略4.3. 定义…...
基于Spring Boot的餐厅订餐网站的设计与实现(Java+spring boot+MySQL)
获取源码或者论文请私信博主 演示视频: 基于Spring Boot的餐厅订餐网站的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java springbo…...
【图像分割】理论篇(1)评估指标代码实现
图像分割是计算机视觉中的重要任务,用于将图像中的不同区域分割成具有语义意义的区域。以下是几种常用的图像分割评价指标以及它们的代码实现示例(使用Python和常见的计算机视觉库): 1. IoU (Intersection over Union) 与目标检…...
Git checkout 某个版本到指定文件夹下
文章目录 场景说明方案一:git archive 最简单省事方案二:git show 最灵活, 但文件较多时麻烦方案三:git --work-tree 有bug 场景说明 我不想checkout到覆盖本地工作区的文件, 而是想把该版本checkout到另外一个文件夹下ÿ…...
Java多态详解(2)
向上转型和向下转型 向上转型 定义:实际就是创建一个子类对象,将其当作父类对象来使用。 语法格式:父类类型 对象名 new 子类类型() Animal animal new Cat("元宝", 2); animal是父类类型,但是可以引用子…...
Camtasia导入srt字幕乱码
我们在使用camtasia制作视频项目时,有时为了用户体验需要导入srt格式的字幕文件,在操作无误的情况下,一顿操作猛如虎之后字幕顺利的导入到软件中了,但字幕却出现了乱码的现象。如下图所示: 如何解决srt乱码问题呢&…...
YOLOv5、YOLOv8改进:SOCA注意力机制
目录 简介 2.YOLOv5使用SOCA注意力机制 2.1增加以下SOCA.yaml文件 2.2common.py配置 2.3yolo.py配置 简介 注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有…...
机器人的运动范围
声明 该系列文章仅仅展示个人的解题思路和分析过程,并非一定是优质题解,重要的是通过分析和解决问题能让我们逐渐熟练和成长,从新手到大佬离不开一个磨练的过程,加油! 原题链接 机器人的运动范围https://leetcode.c…...
学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁
文章目录 2 函数的使用1.函数定义(需要带类型)2.函数声明(需要带类型)3.函数调用 3 新建文件,使用模块化编程新建xxx.c和xxx.h文件xxx.h格式:调用头文件验证代码调用:完整的文件结构如下&#x…...
微服务-Ribbon(负载均衡)
负载均衡的面对多个相同的服务的时候,我们选择一定的策略去选择一个服务进行 负载均衡流程 Ribbon结构组成 负载均衡策略 RoundRobinRule:简单的轮询服务列表来选择服务器AvailabilityFilteringRule 对两种情况服务器进行忽略: 1.在默认情…...
解决C#报“MSB3088 未能读取状态文件*.csprojAssemblyReference.cache“问题
今天在使用vscode软件C#插件,编译.cs文件时,发现如下warning: 图(1) C#报cache没有更新 出现该warning的原因:当前.cs文件修改了,但是其缓存文件*.csprojAssemblyReference.cache没有更新,需要重新清理一下工程&#x…...
GeoScene Pro在地图制图当中的应用
任何地理信息系统建设过程中,背景地图的展示效果对整个系统功能的实现没有直接影响;但是地图的好看与否,会间接的决定着整个项目的高度。 一幅精美的地图不仅能令人赏心悦目、眼前一亮,更能将人吸引到你的系统中,更愿意…...
国标混凝土结构设计规范的混凝土本构关系——基于python代码生成
文章目录 0. 背景1. 代码2. 结果测试 0. 背景 最近在梳理混凝土塔筒的计算指南,在求解弯矩曲率关系以及MN相关曲线时,需要混凝土的本构关系作为输入条件。 1. 代码 这段代码还是比较简单的。不过需要注意的是,我把受拉和受压两种状态统一了…...
系统架构设计-架构师之路(八)
软件架构概述 需求分析到软件设计之间的过渡过程就是软件架构。 需求分析人员整理成文档,但是开发人员对业务并不熟悉,这时候中间就需要一个即懂软件又懂业务的人,架构师来把文档整理成系统里的各个开发模块,布置开发任务。 软…...
【SA8295P 源码分析】25 - QNX Ethernet MAC 驱动 之 emac_isr_thread_handler 中断处理函数源码分析
【SA8295P 源码分析】25 - QNX Ethernet MAC 驱动 之 emac_isr_thread_handler 中断处理函数源码分析 一、emac 中断上半部:emac_isr()二、emac 中断下半部:emac_isr_thread_handler()2.1 emac 中断下半部:emac_isr_sw()系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章…...
函数栈帧的创建与销毁
目录 引言 基础知识 内存模型 寄存器的种类与功能 常用的汇编指令 函数栈帧创建与销毁 main()函数栈帧的创建 NO1. NO2. NO3. NO4. NO5. NO6. main()函数栈帧变量的创建 调用Add()函数栈帧的预备工作——传参 NO1. NO2. NO3. Add()函数栈帧的创建 …...
工业安全生产平台在面粉行业的应用分享
一、背景介绍 面粉行业是一个传统的工业行业,安全生产问题一直备受关注。然而,由于生产过程中存在的各种安全隐患和风险,如粉尘爆炸、机械伤害等,使得面粉行业的安全生产形势依然严峻。为了解决这一问题,工业安全生产…...
Gitlab服务部署及应用
目录 Gitlab简介 Gitlab工作原理 Gitlab服务构成 Gitlab环境部署 安装依赖包 启动postfix,并设置开机自启 设置防火墙 下载安装gitlab rpm包 修改配置文件/etc/gitlab/gitlab.rb,生产环境下可以根据需求修改 重新加载配置文件 浏览器登录Gitlab输…...
【nodejs】用Node.js实现简单的壁纸网站爬虫
1. 简介 在这个博客中,我们将学习如何使用Node.js编写一个简单的爬虫来从壁纸网站获取图片并将其下载到本地。我们将使用Axios和Cheerio库来处理HTTP请求和HTML解析。 2. 设置项目 首先,确保你已经安装了Node.js环境。然后,我们将创建一个…...
xlsx xlsx-style file-saver 导出json数据到excel文件并设置标题字体加粗
xlsx:用于处理Excel文件。xlsx-style:用于添加样式到Excel文件中。file-saver:用于将生成的Excel文件保存到用户的计算机上 npm install xlsx xlsx-style file-saver// 导入所需库 const XLSX require(xlsx); const XLSXStyle require(xls…...
Win11游戏高性能模式怎么开
1、点击桌面任务栏上的“开始”图标,在打开的应用中,点击“设置”; 2、“设置”窗口,左侧找到“游戏”选项,在右侧的选项中,找到并点击打开“游戏模式”; 3、打开的“游戏模式”中,找…...
怎么生成网页链接/seo关键词排名优化专业公司
小白鱼学习笔记汇总(2019.09-2020-08) 这是过去近一年( 2019.09-2020-08 ),小白鱼公众号所有技术类推文的汇总。 小白鱼公众号创建于 2019 年 9 月中旬,其实现在离一周年还差 1 个月。但是实在是来不及等到 9 月份了,就当是个“伪周年纪念”吧 …… 尽管如此,这也是辛辛苦苦…...
寮步建设网站/seo工具
最近在开发mdwiki的时候遇到这样一个问题.Post is unbond to session.我就好奇了 postPost.query.filter_by(locationlocation).first() abspathutil.getAbsPostPath(post.location) tagsList[] ... print(post in session) #False post.tagstagsList这样还报post不在session中…...
天津 公司做网站/网站的seo如何优化
下面的代码就是要实现的功能是 用户填写完评论 点击提交 按钮 留言就会增加到留言板尾部上 留言的数量也会加1 反之 删除一条评论 留言数量 减去 1 看了之前的上篇 就应该知道了 发布留言和删除留言功能是用户主动去触发的 所以是 观察者 发布消息 相当于上篇讲的卫星角色 评…...
哪里可以做外贸网站/百度有刷排名软件
关于js中正则匹配特殊字符 function CheckStr(){var res /[~!#$%^&*()_\-<>?:"{}|,.\/;\\[\]~!#¥%……&*()——\-{}|《》?:“” 【】、;‘’,。、]/im;…...
用asp做的网站如何运行/seo快速排名工具
闲来无事,记记笔记 二级导航的实现,就是一个二级联动,嗯 先来看看数据库,我喜欢用一个表,表多了就不好玩了 二级代号取一级导航的代号就行了,做个简单的栗子; 代码部分: 看控制器&am…...
东莞茶山网站建设/百度关键词首页排名怎么上
最近推荐一位日本女明星——石原里美 封面就是其本人 有颜有才 笑起来真的很好看了 希望大家能与我一起欣赏她的美 啊哈哈哈哈哈哈哈哈 补一句:我不是超级无敌屌丝猥琐男哈!!! 给定一个可能包含重复元素的整数数组 nums&…...