-
24位有符号数转32位有符号数最简单方法【stm32/C语言】
2020-05-12 15:48:0224位有符号数转32位有符号数最简单方法 最近第一次用24位ADC,用SPI读取的数据是24位有符号数。 众所周知,数据的最高位是符号位,那么24位数据的第24位是符号位,而在C语言中24位数据只能用32位变量存储,32位...24位有符号数转32位有符号数最简单方法
最近第一次用24位ADC,用SPI读取的数据是24位有符号数。
众所周知,数据的最高位是符号位,那么24位数据的第24位是符号位,而在C语言中24位数据只能用32位变量存储,32位变量的符号位很明显在第32位,直接赋值是不会有负数的。
网上看了很多方法,什么用指针,什么把24位数据分成3个8位,什么取反再+1,乱七八糟一堆不说,代码又长,居然还有很多文章的结果算出来是错的,差点被他们绕进去。
那么问题来了
24位数据转为32位数据是怎么回事呢?24位数据相信大家都很熟悉,但是24位数据转为32位数据是怎么回事呢,下面就让小编带大家一起了解吧。
24位数据转为32位数据,其实就是负数多余位补1,大家可能会很惊讶24位数据怎么会转为32位数据呢?但事实就是这样,小编也感到非常惊讶。
这就是关于24位数据转为32位数据的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
程序如下:首先判断这个数是不是负数,如果是负数,则把多余位补1即可。int S24toS32(int input) { if((input&0x800000)==0x800000) //如果最高位为1,则是负数 { input |= 0xff000000; //高位补1 } return input; }
我们输入几个24位数验证一下:
是不是很简单呢? -
将24位(任意位数)补码转换成有符号整数的方法
2020-10-14 20:08:47我们在使用ADC的时候可能会遇到AD转换结果以24bit、12bit、10bit或诸如此类的补码形式输出,而计算机...假设有一个5bit的有符号数10011(补码),最高位的1是符号位,这个数的值是-13。而单片机或计算机中并没有5位的变我们在使用ADC的时候可能会遇到AD转换结果以24bit、12bit、10bit或诸如此类的补码形式输出,而计算机或单片机中,变量类型大多是8bit、16bit、32bit的。那该怎样把这些AD转换得到的补码转换成一个有符号的整数存放在一个有符号变量中呢?
由于有符号的数在计算机中本来就是以补码形式进行存放,因此不需要进行码制的转换,有一个简单的小技巧可以实现这种功能。
先来看一个例子:
假设有一个5bit的有符号数10011(补码),最高位的1是符号位,这个数的值是-13。而单片机或计算机中并没有5位的变量,我们希望能够用一个8位的有符号(char)变量来存放这5位的数,并且不希望改变这个数的大小。那么将这5位数据存放到char型变量的最低5位时,必然会产生3位的空位。对于有符号数来说,进行符号位的扩充可以在不改变数据大小的同时,将这剩余的3个空位填满。对于10011(-13),我们将符号位1进行扩展,得到111 10011,它仍然是-13的补码。对于一个正数,例如00011(正3),对符号位0进行扩展,得到000 00011,它仍然是正3的补码。这也就说明:
将任意位数的数据,存放在变量的低位,而空余的高位进行符号位扩展,就可以在不改变数据本身大小的情况下,实现将任意位数的数据存放到一个char、short int或int类型的变量中,使之可以被计算机解读成一个有符号的整数
那么剩下的问题是,在单片机和计算机中怎么实现符号位的扩展呢?下面举例说明:
假设我们有一个24bit的补码数据,要将其存放至int类型变量中。
我们定义了:int rawValue
然后将这24bit,存放至rawValue的低24位中,那么要进行符号扩展,可以用以下代码实现:
rawValue= ((rawValue<< 8) >> 8);
有人会说左移8位再右移8位不是相当于什么也没做吗?那么你没明白C语言中右移运算符的含义,可以参考我的另一篇博客https://blog.csdn.net/weixin_44509533/article/details/109080809
左移8位使得24位数据的最高位(符号位)移动到了rawValue的最高位上,而由于int类型是有符号类型,在用右移运算符进行运算时,实际上是进行算术右移,而算术右移能够保持符号位不变,因此实现了符号位的扩展,最终的效果是rawValue的值与24bit补码数据的值相等,而通过这一操作,我们将24bit补码数据装载进了一个int类型变量中,方便后续对这个有符号整数进行其他处理。 -
ffmpeg音频文件格式转换(支持重采样采样位数为24位)
2021-02-04 10:14:37ffmpeg将音频文件重采样为8位、16位、32位的命令比较容易查找,但是重采样为24位却非常非常的少。 ffmpeg -i 32.wav -vn -ac 2 -ar 44100 -...-acodec: 设置输出文件音频编解码器,这里为pcm_s24le(小端有符号的24位) -ffmpeg将音频文件重采样为8位、16位、32位的命令比较容易查找,但是重采样为24位却非常非常的少。
ffmpeg -i 32.wav -vn -ac 2 -ar 44100 -acodec pcm_s24le -y 24.wav -i: 输入文件,这里为 32.wav -vn: 输出文件禁用视频流 -ac: 设置输出文件音频通道的数量,这里为2(双通道) -ar: 设置输出文件音频采样率,这里为44100 -acodec: 设置输出文件音频编解码器,这里为pcm_s24le(小端有符号的24位) -y: 无需询问即可覆盖输出文件
ffmpeg支持的编解码有
Decoders: V..... = Video A..... = Audio S..... = Subtitle .F.... = Frame-level multithreading ..S... = Slice-level multithreading ...X.. = Codec is experimental ....B. = Supports draw_horiz_band .....D = Supports direct rendering method 1 ------ V....D 012v Uncompressed 4:2:2 10-bit V....D 4xm 4X Movie V....D 8bps QuickTime 8BPS video V....D aasc Autodesk RLE V..... amv AMV Video V....D anm Deluxe Paint Animation V....D ansi ASCII/ANSI art V....D asv1 ASUS V1 V....D asv2 ASUS V2 V....D aura Auravision AURA V....D aura2 Auravision Aura 2 V....D avrn Avid AVI Codec V....D avrp Avid 1:1 10-bit RGB Packer V....D avs AVS (Audio Video Standard) video V....D avui Avid Meridien Uncompressed V....D ayuv Uncompressed packed MS 4:4:4:4 V....D bethsoftvid Bethesda VID video V....D bfi Brute Force & Ignorance V....D binkvideo Bink video V....D bintext Binary text V....D bmp BMP (Windows and OS/2 bitmap) V....D bmv_video Discworld II BMV video V....D brender_pix BRender PIX image V....D c93 Interplay C93 V....D cavs Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile) V....D cdgraphics CD Graphics video V....D cdxl Commodore CDXL video V....D cinepak Cinepak V....D cljr Cirrus Logic AccuPak V....D cllc Canopus Lossless Codec V....D eacmv Electronic Arts CMV video (codec cmv) V....D cpia CPiA video format V....D camstudio CamStudio (codec cscd) V....D cyuv Creative YUV (CYUV) V....D dfa Chronomaster DFA V..... dirac BBC Dirac VC-2 V..... libschroedinger libschroedinger Dirac 2.2 (codec dirac) VF...D dnxhd VC3/DNxHD V....D dpx DPX image V....D dsicinvideo Delphine Software International CIN video V.S..D dvvideo DV (Digital Video) V....D dxa Feeble Files/ScummVM DXA V....D dxtory Dxtory V....D escape124 Escape 124 V....D escape130 Escape 130 VF...D exr OpenEXR image V.S..D ffv1 FFmpeg video codec #1 VF..BD ffvhuff Huffyuv FFmpeg variant V....D flashsv Flash Screen Video v1 V....D flashsv2 Flash Screen Video v2 V....D flic Autodesk Animator Flic video V...BD flv FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1) VF...D fraps Fraps V....D frwu Forward Uncompressed V....D gif GIF (Graphics Interchange Format) V....D h261 H.261 V...BD h263 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 V...BD h263i Intel H.263 V...BD h263p H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 VF..BD huffyuv Huffyuv / HuffYUV V....D idcinvideo id Quake II CIN video (codec idcin) V....D idf iCEDraw text V....D iff IFF (codec iff_byterun1) V....D iff IFF (codec iff_ilbm) V....D indeo2 Intel Indeo 2 V....D indeo3 Intel Indeo 3 V....D indeo4 Intel Indeo Video Interactive 4 V....D indeo5 Intel Indeo Video Interactive 5 V....D interplayvideo Interplay MVE video V..X.. j2k JPEG 2000 (codec jpeg2000) VF...D libopenjpeg OpenJPEG JPEG 2000 (codec jpeg2000) V....D jpegls JPEG-LS V....D jv Bitmap Brothers JV video V....D kgv1 Kega Game Video V....D kmvc Karl Morton's video codec VF...D lagarith Lagarith lossless V....D loco LOCO V....D eamad Electronic Arts Madcow Video (codec mad) VF...D mdec Sony PlayStation MDEC (Motion DECoder) VF...D mimic Mimic V....D mjpeg MJPEG (Motion JPEG) V....D mjpegb Apple MJPEG-B V....D mmvideo American Laser Games MM Video V....D motionpixels Motion Pixels video V.S.BD mpeg1video MPEG-1 video V.S.BD mpeg2video MPEG-2 video V.S.BD mpegvideo MPEG-1 video (codec mpeg2video) VF..BD mpeg4 MPEG-4 part 2 V....D msa1 MS ATC Screen V...BD msmpeg4v1 MPEG-4 part 2 Microsoft variant version 1 V...BD msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2 V...BD msmpeg4 MPEG-4 part 2 Microsoft variant version 3 (codec msmpeg4v3) V....D msrle Microsoft RLE V....D mss1 MS Screen 1 V....D mss2 MS Windows Media Video V9 Screen V....D msvideo1 Microsoft Video 1 V....D mszh LCL (LossLess Codec Library) MSZH V....D mts2 MS Expression Encoder Screen V....D mvc1 Silicon Graphics Motion Video Compressor 1 V....D mvc2 Silicon Graphics Motion Video Compressor 2 V....D mxpeg Mobotix MxPEG video V....D nuv NuppelVideo/RTJPEG V....D paf_video Amazing Studio Packed Animation File Video V....D pam PAM (Portable AnyMap) image V....D pbm PBM (Portable BitMap) image V....D pcx PC Paintbrush PCX image V....D pgm PGM (Portable GrayMap) image V....D pgmyuv PGMYUV (Portable GrayMap YUV) image V....D pictor Pictor/PC Paint V....D png PNG (Portable Network Graphics) image V....D ppm PPM (Portable PixelMap) image V.S..D prores ProRes V.S..D prores_lgpl Apple ProRes (iCodec Pro) (codec prores) V....D ptx V.Flash PTX image V....D qdraw Apple QuickDraw V....D qpeg Q-team QPEG V....D qtrle QuickTime Animation (RLE) video V....D r10k AJA Kona 10-bit RGB Codec V....D r210 Uncompressed RGB 10-bit V..... rawvideo raw video V....D rl2 RL2 video V....D roqvideo id RoQ video (codec roq) V....D rpza QuickTime video (RPZA) V....D rv10 RealVideo 1.0 V....D rv20 RealVideo 2.0 VF...D rv30 RealVideo 3.0 VF...D rv40 RealVideo 4.0 V....D sanm LucasArts SMUSH video V....D sgi SGI image V....D sgirle SGI RLE 8-bit V....D smackvid Smacker video (codec smackvideo) V....D smc QuickTime Graphics (SMC) V....D snow Snow V....D sp5x Sunplus JPEG (SP5X) V....D sunrast Sun Rasterfile image V....D svq1 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1 V...BD svq3 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3 V....D targa Truevision Targa image V....D targa_y216 Pinnacle TARGA CineWave YUV16 V....D eatgq Electronic Arts TGQ video (codec tgq) V..... eatgv Electronic Arts TGV video (codec tgv) VF..BD theora Theora V....D thp Nintendo Gamecube THP video V....D tiertexseqvideo Tiertex Limited SEQ video V....D tiff TIFF image V....D tmv 8088flex TMV V....D eatqi Electronic Arts TQI Video (codec tqi) V....D truemotion1 Duck TrueMotion 1.0 V....D truemotion2 Duck TrueMotion 2.0 V....D camtasia TechSmith Screen Capture Codec (codec tscc) V....D tscc2 TechSmith Screen Codec 2 V....D txd Renderware TXD (TeXture Dictionary) image V....D ultimotion IBM UltiMotion (codec ulti) VF...D utvideo Ut Video V....D v210 Uncompressed 4:2:2 10-bit V....D v210x Uncompressed 4:2:2 10-bit V....D v308 Uncompressed packed 4:4:4 V....D v408 Uncompressed packed QT 4:4:4:4 V....D v410 Uncompressed 4:4:4 10-bit V....D vb Beam Software VB V....D vble VBLE Lossless Codec V....D vc1 SMPTE VC-1 V....D vc1image Windows Media Video 9 Image v2 V....D vcr1 ATI VCR1 V....D xl Miro VideoXL (codec vixl) V....D vmdvideo Sierra VMD video V....D vmnc VMware Screen Codec / VMware Video VF..BD vp3 On2 VP3 V....D vp5 On2 VP5 V....D vp6 On2 VP6 V.S..D vp6a On2 VP6 (Flash version, with alpha channel) V....D vp6f On2 VP6 (Flash version) VFS..D vp8 On2 VP8 V..... libvpx libvpx VP8 (codec vp8) V...BD wmv1 Windows Media Video 7 V...BD wmv2 Windows Media Video 8 V....D wmv3 Windows Media Video 9 V....D wmv3image Windows Media Video 9 Image V....D wnv1 Winnov WNV1 V....D vqavideo Westwood Studios VQA (Vector Quantized Animation) video (codec ws_vqa) V....D xan_wc3 Wing Commander III / Xan V....D xan_wc4 Wing Commander IV / Xxan V....D xbin eXtended BINary text V....D xbm XBM (X BitMap) image V..... xface X-face image V....D xwd XWD (X Window Dump) image V....D y41p Uncompressed YUV 4:1:1 12-bit V..... yop Psygnosis YOP Video V....D yuv4 Uncompressed packed 4:2:0 V....D zerocodec ZeroCodec Lossless Video V....D zlib LCL (LossLess Codec Library) ZLIB V....D zmbv Zip Motion Blocks Video A....D 8svx_exp 8SVX exponential A....D 8svx_fib 8SVX fibonacci A....D aac AAC (Advanced Audio Coding) A....D aac_latm AAC LATM (Advanced Audio Coding LATM syntax) A....D ac3 ATSC A/52A (AC-3) A....D adpcm_4xm ADPCM 4X Movie A....D adpcm_adx SEGA CRI ADX ADPCM A....D adpcm_afc ADPCM Nintendo Gamecube AFC A....D adpcm_ct ADPCM Creative Technology A....D adpcm_ea ADPCM Electronic Arts A....D adpcm_ea_maxis_xa ADPCM Electronic Arts Maxis CDROM XA A....D adpcm_ea_r1 ADPCM Electronic Arts R1 A....D adpcm_ea_r2 ADPCM Electronic Arts R2 A....D adpcm_ea_r3 ADPCM Electronic Arts R3 A....D adpcm_ea_xas ADPCM Electronic Arts XAS A....D g722 G.722 ADPCM (codec adpcm_g722) A....D g726 G.726 ADPCM (codec adpcm_g726) A....D adpcm_ima_amv ADPCM IMA AMV A....D adpcm_ima_apc ADPCM IMA CRYO APC A....D adpcm_ima_dk3 ADPCM IMA Duck DK3 A....D adpcm_ima_dk4 ADPCM IMA Duck DK4 A....D adpcm_ima_ea_eacs ADPCM IMA Electronic Arts EACS A....D adpcm_ima_ea_sead ADPCM IMA Electronic Arts SEAD A....D adpcm_ima_iss ADPCM IMA Funcom ISS A....D adpcm_ima_oki ADPCM IMA Dialogic OKI A....D adpcm_ima_qt ADPCM IMA QuickTime A....D adpcm_ima_smjpeg ADPCM IMA Loki SDL MJPEG A....D adpcm_ima_wav ADPCM IMA WAV A....D adpcm_ima_ws ADPCM IMA Westwood A....D adpcm_ms ADPCM Microsoft A....D adpcm_sbpro_2 ADPCM Sound Blaster Pro 2-bit A....D adpcm_sbpro_3 ADPCM Sound Blaster Pro 2.6-bit A....D adpcm_sbpro_4 ADPCM Sound Blaster Pro 4-bit A....D adpcm_swf ADPCM Shockwave Flash A....D adpcm_thp ADPCM Nintendo Gamecube THP A....D adpcm_xa ADPCM CDROM XA A....D adpcm_yamaha ADPCM Yamaha A....D alac ALAC (Apple Lossless Audio Codec) A....D amrnb AMR-NB (Adaptive Multi-Rate NarrowBand) (codec amr_nb) A....D libopencore_amrnb OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb) A....D amrwb AMR-WB (Adaptive Multi-Rate WideBand) (codec amr_wb) A....D libopencore_amrwb OpenCORE AMR-WB (Adaptive Multi-Rate Wide-Band) (codec amr_wb) A....D ape Monkey's Audio A....D atrac1 Atrac 1 (Adaptive TRansform Acoustic Coding) A....D atrac3 Atrac 3 (Adaptive TRansform Acoustic Coding 3) A....D binkaudio_dct Bink Audio (DCT) A....D binkaudio_rdft Bink Audio (RDFT) A....D bmv_audio Discworld II BMV audio A....D comfortnoise RFC 3389 comfort noise generator A....D cook Cook / Cooker / Gecko (RealAudio G2) A....D dsicinaudio Delphine Software International CIN audio A....D dca DCA (DTS Coherent Acoustics) (codec dts) A....D eac3 ATSC A/52B (AC-3, E-AC-3) A....D flac FLAC (Free Lossless Audio Codec) A....D g723_1 G.723.1 A....D g729 G.729 A....D gsm GSM A....D libgsm libgsm GSM (codec gsm) A....D gsm_ms GSM Microsoft variant A....D libgsm_ms libgsm GSM Microsoft variant (codec gsm_ms) A....D iac IAC (Indeo Audio Coder) A....D imc IMC (Intel Music Coder) A....D interplay_dpcm DPCM Interplay A....D mace3 MACE (Macintosh Audio Compression/Expansion) 3:1 A....D mace6 MACE (Macintosh Audio Compression/Expansion) 6:1 A....D mlp MLP (Meridian Lossless Packing) A....D mp1 MP1 (MPEG audio layer 1) A....D mp1float MP1 (MPEG audio layer 1) (codec mp1) A....D mp2 MP2 (MPEG audio layer 2) A....D mp2float MP2 (MPEG audio layer 2) (codec mp2) A....D mp3 MP3 (MPEG audio layer 3) A....D mp3float MP3 (MPEG audio layer 3) (codec mp3) A....D mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3) A....D mp3adufloat ADU (Application Data Unit) MP3 (MPEG audio layer 3) (codec mp3adu) A....D mp3on4 MP3onMP4 A....D mp3on4float MP3onMP4 (codec mp3on4) A....D als MPEG-4 Audio Lossless Coding (ALS) (codec mp4als) A....D mpc7 Musepack SV7 (codec musepack7) A....D mpc8 Musepack SV8 (codec musepack8) A....D nellymoser Nellymoser Asao A....D libopus libopus Opus (codec opus) A....D paf_audio Amazing Studio Packed Animation File Audio A....D pcm_alaw PCM A-law / G.711 A-law A....D pcm_bluray PCM signed 16|20|24-bit big-endian for Blu-ray media A....D pcm_dvd PCM signed 20|24-bit big-endian A....D pcm_f32be PCM 32-bit floating point big-endian A....D pcm_f32le PCM 32-bit floating point little-endian A....D pcm_f64be PCM 64-bit floating point big-endian A....D pcm_f64le PCM 64-bit floating point little-endian A....D pcm_lxf PCM signed 20-bit little-endian planar A....D pcm_mulaw PCM mu-law / G.711 mu-law A....D pcm_s16be PCM signed 16-bit big-endian A....D pcm_s16be_planar PCM signed 16-bit big-endian planar A....D pcm_s16le PCM signed 16-bit little-endian A....D pcm_s16le_planar PCM signed 16-bit little-endian planar A....D pcm_s24be PCM signed 24-bit big-endian A....D pcm_s24daud PCM D-Cinema audio signed 24-bit A....D pcm_s24le PCM signed 24-bit little-endian A....D pcm_s24le_planar PCM signed 24-bit little-endian planar A....D pcm_s32be PCM signed 32-bit big-endian A....D pcm_s32le PCM signed 32-bit little-endian A....D pcm_s32le_planar PCM signed 32-bit little-endian planar A....D pcm_s8 PCM signed 8-bit A....D pcm_s8_planar PCM signed 8-bit planar A....D pcm_u16be PCM unsigned 16-bit big-endian A....D pcm_u16le PCM unsigned 16-bit little-endian A....D pcm_u24be PCM unsigned 24-bit big-endian A....D pcm_u24le PCM unsigned 24-bit little-endian A....D pcm_u32be PCM unsigned 32-bit big-endian A....D pcm_u32le PCM unsigned 32-bit little-endian A....D pcm_u8 PCM unsigned 8-bit A....D pcm_zork PCM Zork A....D qcelp QCELP / PureVoice A....D qdm2 QDesign Music Codec 2 A....D real_144 RealAudio 1.0 (14.4K) (codec ra_144) A....D real_288 RealAudio 2.0 (28.8K) (codec ra_288) A....D ralf RealAudio Lossless A....D roq_dpcm DPCM id RoQ A....D s302m SMPTE 302M A....D shorten Shorten A....D sipr RealAudio SIPR / ACELP.NET A....D smackaud Smacker audio (codec smackaudio) A....D sol_dpcm DPCM Sol A..X.D sonic Sonic A....D libspeex libspeex Speex (codec speex) A....D tak TAK (Tom's lossless Audio Kompressor) A....D truehd TrueHD A....D truespeech DSP Group TrueSpeech A....D tta TTA (True Audio) A....D twinvq VQF TwinVQ A....D vima LucasArts VIMA audio A....D vmdaudio Sierra VMD audio A....D vorbis Vorbis A..... libvorbis libvorbis (codec vorbis) A....D wavesynth Wave synthesis pseudo-codec A....D wavpack WavPack A....D ws_snd1 Westwood Audio (SND1) (codec westwood_snd1) A....D wmalossless Windows Media Audio Lossless A....D wmapro Windows Media Audio 9 Professional A....D wmav1 Windows Media Audio 1 A....D wmav2 Windows Media Audio 2 A....D wmavoice Windows Media Audio Voice A....D xan_dpcm DPCM Xan S..... dvbsub DVB subtitles (codec dvb_subtitle) S..... dvdsub DVD subtitles (codec dvd_subtitle) S..... pgssub HDMV Presentation Graphic Stream subtitles (codec hdmv_pgs_subtitle) S..... jacosub JACOsub subtitle S..... microdvd MicroDVD subtitle S..... mov_text 3GPP Timed Text subtitle S..... mpl2 MPL2 subtitle S..... pjs PJS subtitle S..... realtext RealText subtitle S..... sami SAMI subtitle S..... srt SubRip subtitle with embedded timing S..... ass SSA (SubStation Alpha) subtitle (codec ssa) S..... subrip SubRip subtitle S..... subviewer SubViewer subtitle S..... subviewer1 SubViewer1 subtitle S..... text Raw text subtitle S..... vplayer VPlayer subtitle S..... webvtt WebVTT subtitle S..... xsub XSUB
-
有符号数在计算机中的表示方法
2021-01-04 15:20:18最近因为要将一个16bit的音频混音算法改成24bit的,复习了有符号数的计算机内的表示方法. 对负数的二进制表示有些遗忘,在网上找了一下资料,贴出来已备再次遗忘: 假设有一个 int 类型的数,值为5,那么,我们...最近因为要将一个16bit的音频混音算法改成24bit的,复习了有符号数的计算机内的表示方法.
对负数的二进制表示有些遗忘,在网上找了一下资料,贴出来已备再次遗忘:
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
现在想知道,-5在计算机中如何表示?
在计算机中,负数以其绝对值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。
反码是相互的,所以也可称:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。
再举一例,我们来看整数-1在计算机中如何表示。假设这也是一个int类型,那么:
1、先取1的原码:00000000 00000000 00000000 000000012、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF整理:
1个字节,不管怎么样只能表示256个数。因为有符号所以我们就把它表示成范围:-128~+127。它在计算机中是怎么储存的呢?
可以这样理解:用最高位表示符号位(如果是0则表示正数,如果是1则表示负数),剩下的7位用来储存数的绝对值的话,能表示2^7个数的绝对值,再考虑正负两种情况,2^7*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。
到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话,一共就只有255个数了,因为10000000的情况没有考虑在内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢?这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和它的绝对值所对应的原码相同,简单的说就是绝对值的原码)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。
总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助理解!
十进制 → 二进制
47 → 101111
有符号的整数 原码 反码 补码
+47 00101111 00101111 00101111(正数的补码和原码、反码相同,不能从字面理解)
-47 00101111 11010000 11010001(负数的补码是在反码上加1) -
24进制转换为10进制
2019-05-28 10:02:05题目:有一个字符串形式表示的24进制数字M,需要转换成10进制数字N,M为无符号数字,可用32位整数存储,以字母0123456789abcdefghijklmn分别表示数字0-23 分析:将24进制数的每一位按照乘以其对应的权值,最后将其加... -
java中int型转float型的精度丢失
2019-10-28 11:25:19int转float必然会导致精度丢失,int型是32位,float型也是32位,但是float是由1位符号位+8位指数位+23位小数位组成。 所以float只能有效表示24位以内的int型数据(float有一位省略的整数位)当int型是24位以上的... -
java int 转换成byte_Java如何将int转换为byte?
2021-03-06 19:01:40在Java中,int是32位。一个字节是8位。...所以如果你有字节255:11111111并且你想把它表示为一个int(32位),你只需将1复制到左边24次。现在,读取负二进制补码的一种方法是从最低有效位开始,向左移动直到找到... -
java byte 和 int 类型转换的问题
2011-10-17 11:01:00byte 转int 是由8位 转到32位的,这样就有了两种扩展方式,0扩展 和1扩展,这要取决去最高位(符号位)是0 还是1 这样的话 如果是 1扩展,那前面的24位就全是1了,这样转换过去的 int 跟原 byte是不一样的,所以 ... -
Java子网掩码与网络标示相互转换
2016-07-13 17:14:18子网掩码通常有以下2种格式的表示方法: ... 在IP地址后加上"/"符号以及1-32的数字,其中1-32的数字表示子网掩码中网络标识位的长度 如:192.168.1.1/24 的子网掩码也可以表示为 255.255.255.0 public Str -
-
最少词数算法:MinimalWordCount 最大Ngram分值算法:MaxNgramScore 9、分词效果评估 运行项目根目录下的脚本evaluation.bat可以对分词效果进行评估 评估采用的测试文本有253 3709行,共2837 4490个字符 评估结果...
-
基本密码学算法之:Base64
2021-01-08 14:58:28所谓Base64,就是说选出...第二步,将这24个二进制位分为四组,每个组有6个二进制位 第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。 第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64 -
JAVA基础之java的移位运算
2010-05-19 23:57:43因为Java 使用2的补码来存储负数,并且因为Java 中的所有整数都是有符号的,这样应用位运算符可以容易地达到意想不到的结果。例如,不管你如何打算,Java 用高位来代表负数。为避免这个讨厌的意外,请记住不管高位的... -
7.整数反转
2020-02-04 10:26:47给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 思路1:24 ms 13.1 MB。先转换成字符串,再使用int()函数把字符串转换成整数。 class Solution: def ... -
Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf
2019-03-02 08:33:511.5.2 数组的维数 24 1.5.3 输入数组公式 25 1.5.4 修改数组公式 25 1.5.5 扩展或缩小多单元格数组公式 26 1.5.6 选择数组公式所在区域 27 1.5.7 使用常量数组 27 1.6 创建跨工作表和跨工作簿引用的公式 28 ... -
程序员二进制计算器 v1.36
2014-07-16 16:21:43当按二、八、十六进制输出时,是按其补码形式输出,最高位是符号位(正数为0、负数为1)。 所以此法可得到一个负数的补码表示。 (1)按二进制输出 %b或%B %b等价与%B。 %b 12 = 0b1100 %b 0xffffffff = 0b1111 ... -
共享一下自己的PCB封装库(Altium Designer)-电路方案
2021-04-19 23:42:06包括自己几年积累下来的,有3D显示,STM32系列的有STM32F103C8、VE、ZE,F105VC、F107VC 为了不增加麻烦,解压后直接打开“LIBPKG”工程,原理图封装与PCB封装直接对应好了,如果修改好了封装,直接编译工程就好了,... -
课程设计简易计算器设计
2011-11-20 11:19:14AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的... -
8086寻址方式及指令系统
2013-01-14 15:52:1718.两个无符号数进行比较时,可以根据 标志位来判断大小。在编写程序时可使用 指令来实现。 19.若执行“DIV BX”,其被除数的高16位必须放在 ,低16位必须放在 。 20.DAA指令只对 寄存器中的内容进行调整。 21.... -
PAC1931/2/3/4中文手册.pdf
2020-06-17 15:12:38+100 mV, 16位二进制补码(有符号)数据 格式 - 外部检测电阻可设置满量程电流范围 - 输入电流极低,可简化布线 • 电压监视器的总线电压范围宽 - 输入共模电压为0V到32V - 电压测量分辨率为 16 位;功率计算使用的... -
Excel函数活用范例大辞典(全新版).何先军.2015-2(带书签高清文字版).pdf
2018-12-18 16:27:31071 统计与公司两项业务都有往来的客户数 150 072 统计语、数、外大于90分且总分大于480分的人数 151 073 统计业绩200000元以上的大专或本科学历男性业务员 152 074 统计各级业务员业绩异常的人数 154 ◎... -
我整理的VBA 自定义函数大全 共138页
2008-11-21 16:14:0331.增加文件路径最后的“\”符号 32.计算所得税 33.从工作表第一行的标题文字以数字形式返回所在列号 34.在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和 35.返回 Column 英文字 36.查找... -
modbus通信协议
2010-08-06 15:26:22• 1个停止位(有校验时),2个Bit(无校验时) 错误检测域 • LRC(纵向冗长检测) 2、RTU模式 当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。... -
C语言程序设计标准教程
2009-05-22 18:29:14十进制无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来... -
EXCEL函数功能整理版
2010-05-30 15:56:2410 ABS 这个函数是用来计算一个数的绝对值,与正负数符号没有关系。 11 ACCRINT 返回定期付息有价证券的应计利息。 12 ACOS 返回数字的反余弦值。反余弦值是角度,它的余弦值为数字。返回的角度值以... -
Excel技巧大全
2015-05-06 07:21:376. 如何消除缩位后的计算误差(微软Office技巧大赛获奖作品) 41 7. 利用选择性粘贴命令完成一些特殊的计算 41 8. Web查询 41 9. 在Excel中进行快速计算 42 10. 自动筛选前10个 42 11. 同时进行多个单元格的运算... -
Excel使用技巧大全(超全).doc
2011-07-19 19:13:406. 如何消除缩位后的计算误差(微软OFFICE技巧大赛获奖作品) 41 7. 利用选择性粘贴命令完成一些特殊的计算 41 8. WEB查询 41 9. 在EXCEL中进行快速计算 42 10. 自动筛选前10个 42 11. 同时进行多个单元格的运算... -
上海电机学院C语言实训答案
2012-01-22 15:28:32设输入的英文短文不超过一行(假设正文最后有“.”结束,以“,”或空格分隔,不出现其他符号),编程将所有单词输出,并求其中最长单词的长度,并将该单词输出。 (4)编写一个程序实现如下功能:有8位裁判为1个...