组合两个整数以创建唯一编号

jan*_*dor 16 c# string math integer

早上好,

我正在寻找一种方法来组合两个整数来创建一个唯一的数字,我有两个表,我需要组合成一个具有唯一数字的第三个表,

这些是我的表:

Table A 
SchoolID    ClassId
107 56644231
107 56644532
107 320110212

Table B 
SchoolID    ClassId
108 566442310
108 56644532
108 50110212
Run Code Online (Sandbox Code Playgroud)

我需要将这些字段导出到第三个表,将表ID和学校ID组合到一个名为classID的字段中.我需要能够将这些数字组合在一起,然后才能将它们组合在一起,以便将schoolid和classid分开以进行更新.我想连接字符串,'schoolid + '00' + 'classid'因为我知道schoolid将始终是一个3位数字,但我正在寻找其他方式或许数学,我不必使用字符串强制转换.

有数学方法可以做到这一点吗?或者是铸造字符串最好的方法来做到这一点?

我正在使用C#来编写解决方案.

谢谢,

use*_*erx 18

与Magnus Hoff类似,但我建议使用二元友好方法而不是基础10方法.

combinedid = (classid << 8) + schoolid;
Run Code Online (Sandbox Code Playgroud)

然后,后来:

classid = combinedid >> 8;
schoolid = combinedid & 0xFF;
Run Code Online (Sandbox Code Playgroud)

从编程的角度来看,我认为这更直接(明确表示您的学校ID是1字节(0-255),类ID是3字节).

您也可以使用bigint(Long/Int64)轻松完成此操作,使两个int32安全地成为一个int64:

combinedid = ((long)classid << 32) + schoolid;
Run Code Online (Sandbox Code Playgroud)

  • 如果classid是如上所述的int32,则代码不正确(classid << 32)将等于classid,因为它包装.正确的是:UInt64 combined = classid; 合并<< = 32; //现在它没有环绕组合+ = schoolid; (2认同)

Mag*_*off 7

combinedid = classid*1000 + schoolid
Run Code Online (Sandbox Code Playgroud)

然后,后来:

classid = combinedid / 1000 // Integer division
schoolid = combinedid % 1000
Run Code Online (Sandbox Code Playgroud)


Pie*_*kel 5

我会像这样结合ID:

ID = ClassID * 1000 + SchoolID
Run Code Online (Sandbox Code Playgroud)

然后你就可以SchoolID这样:

SchoolID = ID % 1000
Run Code Online (Sandbox Code Playgroud)

你可以ClassID这样:

ClassID = ID / 1000
Run Code Online (Sandbox Code Playgroud)