int_size_is_32(),判断int是否为32位

32位程序移植到64位需要考虑的问题 概述 从32位到64位,根本性的区别在于两种数据类型发生了变化:long和pointer。在32位环境下,两者长度都是32位,也就是4个字节;而在64位环境下都是8个字节。所以当你把pointer或者long型数据赋给int型时,会发生数据截断(data truncation)。 1、32位与64位数据模型之间的区别 32位应用的数据模型我们称作ILP32(之所以这样命名,是因为int,lo 阅读详情

     题目来自深入理解计算机系统习题2.67,题目描述:编写一个函数int_size_is_32(),当在一个int为32位的机器上运行时,返回1,而其他情况返回0,不允许用sizeof操作符。

     首先进行的尝试:

int Is_Int_32() 
{
	int set_msb = 1 << 31;
	int beyond_msb = 1 << 32;
	return set_msb && !beyond_msb; 
}
   一般情况下运行良好,但是在SUN PARC这样的32位机器上运行时,过程返回为0.编译器提示如下:


 问:

A.这个代码在哪个方面没有遵守C语言标准

B 修改代码,使它在int至少为32位的任何机器上都能正确的运行

C 修改代码,使它在int至少为16位的任何机器上都能正确的运行


对于A,移位数量可能会大于等于字长,在这里,个人推测是SUN的那32位机器里,int是16位表示,所以会有警告超出

对于B,不用修改即可

对于C,可以修改如下:

int  Is_Int_32_2() 
{
	int i=1;
	int digit_count=1;
	while ((i=i<<16)>0)
		digit_count++;
	return digit_count==2 ? 1:0;
}
不用移位计算可以计算判断int是否32位也可以利用指针的特性,指向int的指针每次加1,增加的空间则为一个int的大小,示范代码如下:

int  Is_Int_32_1() 
{
	int i=1;
	return (int)(&i+1)-(int)(&i)==4 ? 1:0;
}
    如果要判断操作系统是否32位呢?则可以利用指针的另一个特点了:指针大小一般等于机器字长,采用二级指针,每次加1,则为一个指针的大小,示范代码如下:

int Is_OS_32()
{
	char *p="ab";
	char **q = &p;
	return (char)(q+1)-(char)(q)==4 ? 1:0;
}

     深入理解计算机系统还真是本好书,慢慢来吧
Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记 Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记-----GCN在交通领域的应用(二) 一、论文翻译: 1、摘要: 及时准确地交通预测对于城市交通控制和指导具有至关重要的意义。由于交通流量的非线性和复杂性,传统的方法不能满足中长期预测任务的需求,并且往往会忽略时空数据的时间和空间依赖特性。在这篇论文中,为了处理在交通领域的时间序列预测问题... 阅读详情

相关推荐

SC-FDMA

<br />SC-FDMA(Single-carrier Frequency-Division Multiple Access,單載波分頻多工),是LTE的上行鏈路的主流多址。<br />SC-FDMA是單波載(Single-carrier),與OFDMA相比之下具有的較低的PAPR(峰值/平均功率比,peak-to-average power ratio),比多載波的PAPR低1-3dB左右(PAPR是由于多載波在频域叠加引起)。更低的PAPR可以使行動終端(mobile terminal)在發送功效方面

jod的专栏 3299

2.67-给你一个任务,编写一个过程int_ size_ is_ 32(), 当在一个int是32位的机器上运行时,该程序产生1,而其他情况则产生0。不允许使用sizeof运算符。下面是开始时的尝试:

接题目: /* The following code does not run properly on some machines */ int bad_int_size_is_32() { /* Set most significant bit (msb) of 32-bit machine */ int set_msb = 1 << 31; /* Shift past msb of 32-bit word */ int beyond_msb = 1 << 32; /*

weixin_45861496的博客 986

思必驰离线语音芯片:智能家居控制的核心引擎

思必驰离线语音芯片TH1520通过本地化语音识别技术,为智能家居带来革命性体验。该芯片具备200-600毫秒的快速响应、75分贝抗噪能力和双核异构设计,显著提升设备交互效率。支持自定义指令和10种音色选择,开发周期缩短至3天,BOM成本降低30%,是智能家居控制的核心引擎。

redis7keeper的博客 984

C 语言 int(32位) 内存中的表示

10000000 00000000 00000000 00000000  -2147483648    2147483648 10000000 00000000 00000000 00000001  -2147483647    2147483649 10000000 00000000 00000000 00000010  -2147483646    2147483650 10000000

wangda3114的专栏 1057

企业华为TaurusDB数据库国产替代要点全记录

国产化数据库全方位对比、从互联网企业的先进经验来看mysql的用法、及sql优化、sql异构修改、及数据同步方面都做了一些讲解

深耕互联网的码农,在AI及国产化浪潮下,希望把自己的能力输出给更多的人 1063

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1434

深入了解计算机系统 2.67

int bad_int_size_is_32(){ int set_msb=1<<31; return set_msb == INT_MIN; } INT_MIN的二进制表示最高位总为1,总位数的多少由操作系统来定。。

tiantiant1的专栏 853

从材料到磁场:ANSYS Workbench永磁体仿真全流程解析

本文详细解析了在ANSYS Workbench中进行永磁体仿真的完整流程。从钕铁硼等永磁材料的特性讲起,逐步指导如何在软件中搭建模型、定义关键磁化方向、设置边界条件与网格划分,并解读磁场分布结果。文章旨在帮助工程师掌握静磁场仿真核心技术,为电机、传感器等设备的设计与优化提供精准指导。

weixin_29229989的博客 272

基于CherryUSB的STM32 UAC复合音频设备开发实战

USB音频设备开发中,UAC(USB Audio Class)协议是跨平台免驱实现声卡、麦克风等产品的核心规范。理解UAC描述符结构、等时传输机制与采样率同步原理,是解决枚举失败、无声、爆音等问题的关键。借助CherryUSB协议栈与STM32系列MCU,开发者可以高效构建符合标准的复合音频设备,实现Windows、Linux、Android等系统即插即用。本文从硬件选型、时钟配置、描述符设计到数据通路实现,系统梳理了UAC麦克风与扬声器复合设备的完整开发流程,并针对常见疑难问题给出排查思路,为USB声卡、

weixin_33904756的博客 643

Drools vs URule:5个真实项目场景告诉你如何选择开源规则引擎

本文通过电商风控、物流计费、会员体系、保险定价和物联网告警五个真实项目场景,深度对比了Drools与URule两款开源规则引擎。分析了两者在规则复杂度、性能表现、开发运维及适用场景上的核心差异,为技术选型提供基于实战的决策指南。

k6l7m8n9的博客 943

【国产MCU系列】-GD32F4开发环境搭建(基于Embedded Builder)

GD32F4系列MCU采用Arm® Cortex®-M4内核,处理器主频高达240MHz,可支持算法复杂度更高的嵌入式应用,具备更快速的实时处理能力,并拥有业界领先的大容量存储优势。

视觉与物联智能 3078

csapp2e 家庭作业 2.67

A 在许多机器上,当移动一个w位的值时,实际上位移量是通过计算k mod w得到的。但是C语言不保证在所有的机器上都是这么做的,在sun spark上就是例外,因此,位移数量应该保持小于字长。 B 将int beyond_msb = 1 分为两步 int beyond_msb = 1                beyond_msb = beyond_msb C  int int_s

深入理解计算机系统 第二版 家庭作业 解答 2739

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 218

C语言 —— int32_t uint32_t 及size_t

文章目录使用int64_t形式代替基本类型使用原因stdint.h源码int32_t和uint32_t的区别size_t在不同机器中定义不同:参考文档 使用int64_t形式代替基本类型 我们都知道,C语言的基本类型就char, short, int 等。但是我们在看其他源码时经常碰到int32_t, int8_t这种形式的定义,他们是什么呢。其实他们就是基本类型的typedef重定义。 也就是不同平台下,使用以下名称可以保证固定长度。 1字节 int8_t —— char 2字节 int1

Charles Ren's Tech Blog 5万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

size_t和int区别

size_t和int size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。 在32位架构中被普遍定义为: typedef unsigned int size_t; 而在64位架构中被定义为: typedef unsigned long size_t; size_t在32位架构上...

AplusX 8万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

u8、u16、u32、s8、s16、s32、Size_t是什么类型

在MDK 开发环境里,比如一个 无符号32位整形数据会有很多种表示方法: 1. unsigned int 32 (C语言标准表达方法) 2. uint32_t ; 3. u32; 这三种方式都是在表达同一个意思,如:_IO int32_t 他等同于vs32,还等同于 volatile int32_t, **volatile signed int 32 这种表达方式才是C语言的标准表达方式** 1.u8就是unsigned char ,是8位无符号char类型的值 /* exact-

weixin_42682108的博客 2万+

C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别

工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。 int_t同类 int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。 int8_t:typedefsignedchar; uint8_t:typed...

好习惯成就伟大 8297

【变量长度】int、long、short等在windows和linux/ 32位和64位下的长度(long long 才能保证64位)

不同平台下C\C++数值数据类型长度如下: 其中long类型和指针类型需要特别注意,编写跨平台的软件时尽量不要使用long类型,或者需要对long类型做特殊处理。 原因: 编译器的数据模型 Datetype LP64 ILP64 LLP64 ILP32 LP32 char 8 8 8 ......

我的笔记本 1万+

Golang中uint、int, int8, int16, int32, int64区别

Golang中uint、int, int8, int16, int32, int64区别 在第一次学习go语言时,对go语言的各种int类型充满疑惑,为什么会有int、int8、int16等等的类型呢?为什么不像java一样,只个int类型呢?直接上demo test.go package main import ( "fmt" "unsafe" ) fun...

离风的博客 4万+

Size_t和int区别

size_t、ssize_t和int的区别

Sambeau 4万+

int8_t、int16_t、int32_t、int64_t、size_t和ssize_t的区别

公众号:CppCoding int_t int_t是一个大类,不同的机器有不同的字长,所以采用typedef的形式,便于后期维护。 int8_t : typedef signed char; uint8_t : typedef unsigned char; int16_t : typedef signed short ; uint16_t : typedef unsign...

qq_43598865的博客 2020

C++ size_t、size_type与int联系与区别

32位机器 size_t = unsigned int 4字节 64位机器 size_t = unsigned long int 8字节 内容转自:https://blog.youkuaiyun.com/lzx_bupt/article/details/6558566 size_type: 由string类类型和vector类类型定义的类型,用以保存任意string对...

seineo 2137

int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t详解

该文为转发,具体链接:https://blog.youkuaiyun.com/yz930618/article/details/84785970 工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。 int_t同类 int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef

Parker盘的博客 7933

64位 int 占几个字节_谨慎在C++中用int

C++两大原罪:有符号整数和无符号整数混用32位整型和64位整型混用99+warnings关我什么事,能跑就行。以下这么长,概括起来一句话:这个整型变量会参与到地址运算吗?(对于整型变量这非常常见,例如用作数组以及stl的索引),如果是,那么不要用int了。原标题说的很绝对,引来了不少没仔细看就开怼的朋友们。为了营造和谐氛围,应该说是“不要乱用int”,或者说是“不要在64位平台上用int索引”。...

weixin_39638929的博客 3811

PHP的int类型在32位和64位系统上占用的字节数分别是多少?为什么会出现这种差异?

特性32 位 PHP64 位 PHPInt 大小4 Bytes8 Bytes最大整数~21 亿~922 亿亿底层原因匹配 32 位 CPU 寄存器宽度匹配 64 位 CPU 寄存器宽度设计目的节省内存,匹配硬件效率支持大范围数值,匹配硬件效率建议已淘汰,避免使用标准生产环境配置终极心法PHP 的int是一面镜子,反射出底层操作系统的架构本质。它不是故意多变,而是为了极致的性能选择了“入乡随俗”。

长风破浪会有时的博客 356

int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别

工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。 int_t同类 int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。 int8_t : typedef signed char; uint8_t : typedef un

ycy的博客 8722

php int 32 64,关于64位PHP仍然使用32位数字的问题

首先,我们知道有两个常量。PHP_INT_MAX和PHP_INT_SIZE。根据PHP官方手册所说,整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18。PHP 不支持无符号整数。Integer值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX...

weixin_33269743的博客 955
上一篇: C++类成员的初始化
下一篇: 2012百度实习生笔试
coder_xia
博客等级 码龄17年 151粉丝 143原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值